• وبلاگ : پاي سيب
  • يادداشت : Cellular automaton
  • نظرات : 0 خصوصي ، 80 عمومي
  • ساعت ویکتوریا

    نام:
    ايميل:
    سايت:
       
    متن پيام :
    حداکثر 2000 حرف
    كد امنيتي:
      
      
     <      1   2   3   4   5    >>    >
     
    + ليسپ 

    عبارت‌هاي لاندا(Lambda) :
    ديگر عبارت‌هاي ويژه لاندا مي‌باشد که براي وصل کردن متغيرها به مقاديرشان که درون يک عبارت ارزيابي مي‌شوند استفاده مي‌شود. اين عملگر همچنين براي ايجاد کردن توابع هم استفاده مي‌شود. آرگومان‌هاي درون لاندا يک ليستي از آرگومان‌ها هستند و عبارت ارزيابي توابع مي‌باشند. مقادير بازگشتي مقاديري از عبارت قبلي که ارزيابي شده‌اند هستند.
    عبارت (Lambda(arg)(+arg1)) زماني که اين تابع به کار برده مي‌شود به صورت يک تابع ارزيابي مي‌شود و وظيفه? اين تابع معرفي کردن يک آرگومان و اتصال دادن آرگومان به arg و در نهايت برگرداندن يک عدد بزرگتر از آرگومان قبلي مي‌باشد عبارت‌هاي لاندا خيلي متفاوت با نام تابع رفتار نمي‌کند بنابراين اگر در عبارت (Lambda(arg)(+arg1))5->6 عدد 5 را وارد کنيم خروجي آن 6 مي‌شود. اتم‌ها : در نسخه? اصلي ليسپ دو نوع داده? ابتدايي وجود دارد: اتم‌ها و ليست‌ها يک ليست يک رشته? منظم و محدودي از عناصر مي‌باشد ، که هر عنصر در درون خودش يکي از اين اتم‌ها و يا ليست‌ها را دارد و يک اتم يک عدد يا يک نماد مي‌باشد.
    در اصل يک نماد يک رقم منحصر به فرد مي‌باشدو به عنوان يک رشته? عددي در سورس کد نوشته شده و هر دو به عنوان يک نام متغير و يک رقم داده‌اي در پردازش نمادين استفاده مي‌شود براي مثال list(foo(BAR 1)2) شامل سه عنصر : Symbol foo و list(BAR 1) و عدد 2 مي‌باشد. تفاوت اصلي بين اتم‌ها و ليست‌ها اين است که اتم‌ها تغيير ناپذير و منحصر به فرد مي‌باشند. دو اتم که دقيقا به يک صورت و به يک روش در يک شي نوشته شده باشد در مکان متفاوتي در سورس کد ظاهر مي‌شوند، هر ليست يک شي مجزا مي‌باشد و به خاطر اينکه مستقل از ديگر ليست هاست و از ديگر ليست‌ها به وسيله? مقايسه? عملگرها مشخص مي‌شود.

    Cons‌ها و ليست‌ها:
    يک ليست ليسپ يک لينک ليست جداست، هر ذره از اين ليست يک Cons ناميده مي‌شود و از دو اشاره گر که Car و Cdr ناميده مي‌شوند ترکيب شده‌است اين دو اشاره گر به ترتيب معادل دو فيلد Data و Next در مقاله? لينک ليست مي‌باشد.
    Car -> Data Cdr -> Next

    بسياري از ساختمان داده‌ها مي‌توانند ترکيب‌هايي از خانه‌هاي Cons را داشت باشند ، يکي از اين ساختمان داده‌هاي ابتدايي ليست مخصوص ناميده مي‌شود ، يک ليست مخصوص هر دو نماد ليست خالي nill و يا خانه‌ها Cons را داراستکه در هر يک از اين خانه‌ها هر اشاره گر Car به يک داده اشاره مي‌کند (که ممکن است اين اشاره گر Cons به يک ليست اشاره کند) و يک اشاره گر Cdr به يک ليست مخصوص ديگر اشاره مي‌کند. اگر يک Cons داده به سر يک لينک ليست برده شود سپس اشاره گر Car آن به اولين عنصر از ليست و اشاره گر Cdr آن به انتهاي يک ليست اشاره مي‌کند به همين دليل عملکرد Car و Cdr را به ترتيب first و rest هم ناميده مي‌شود.
    ارايه? ليست عبارت نمادين:
    نمايش پرانتزگذلري عبارت نمادين ساختمان لينک ليست . چندين راه براي نمايش ليست يکسان به عنوان يک عبارت نمادين وجود دارد . يک خانه (Cons ) مي‌تواند به صورت نشان گذاري جفت نقطه گذاري شده نوشته شود به عنوان مثال (a.b) که در آن a يک Car و b يک Cdr است. يک ليست مخصوص بلند ممکن است به صورت يک نشان گذاري جفت نقطه گذاري شده نوشته شود .(a.(b.(c.(d.nill))))

    طبق قرارداد کوتاه شده? عبارت بالا به صورت (a b c d ) در نمادسازي ليست مي‌باشد يک ليست مخصوص ممکن است در يک ترکيبي از دو صورت (a b c.d) نوشته شود . براي سيستمي از سه Cons که آخرين Cdr آن d است.

    دستورالعمل‌هاي پردازش ليست:
    ليسپ دستورالعمل‌هاي زيادي را براي دستيابي و کنترل ليست‌ها فراهم مي‌کند . ليست‌ها مي‌توانند مستقيما با پردازه? ليست ايجاد شوند .ليست هر تعدادي از آرگومان‌ها را مي‌پذيرد و تعدادي از آرگومان‌ها را بر مي‌گرداند.

    (list 1 2 ‘a 3 ); Output : (1 2 a 3 ) (list 1 ‘(2 3) 4 ); Output : (1 (2 3) 4)

    به اين دليل راهي که ليست‌ها ايجادمي شوند از جفت‌هاي Cons (Car,Cdr) پردازه? Cons مي‌تواند براي اضافه کردن يک عنصر به جلوي يک ليست استفاده شود. توجه کنيد که پردازه? Cons در هدايت و به کار بردن آرگومان‌هاي ليست نامتقارن است ، بدين دليل روش‌هاي ليست‌ها ايجاد مي‌شوند.

    (Cons 1 ‘(2 3)); Output: (1 2 3 ) (Cons ’(1 2) ‘(3 4)) Output : ((1 2) 3 4)

    پردازه? Oppend دو يا چند ليست را با هم ادغام مي‌کند و يک ليست واحد ايجاد مي‌کند زيرا ليست ليسپ يک لينک ليست است و پيچيدگي زماني الحاق کردن ليست‌ها از مرتبه? پيچيدگي زماني O(n) مي‌باشد.
    ساختار اشتراکي: ليست‌هاي ليسپ لينک ليست‌هاي ساده مي‌توانند با يکي ديگر از ليست‌ها در ساختمان مشترک باشند به عبارت ديگر دو ليست مي‌توانند دم يکساني داشته باشنديا رشته? پاياني از Cons‌هاي يکساني داشته باشند مثلا:

    (setf foo (list "a "b "c)) (setf bar (cons "x (cdr foo)))

    ليست foo و bar به ترتيب به صورت (a b c) و (X b c ) هستند هرچند دم (b c ) در هر دو ليست ساختار يکساني دارند ولي مانند هم نيستند، خانه‌هاي Cons اشاره گر به b و c در محل حافظه? يکساني براي هردو ليست قرار دارد.
    ساختار اشتراکي سريع تر از کپي کردن مي‌تواند به صورت چشمگيري کارايي را بهبود بخشند. هرچند ، اين مهارت مي‌تواند متقابلا در راه‌هاي نامطلوب با عملکردهايي که تغييرات ليست‌هاي گذشته روي آرگومان‌هاي آن تاثير بگذارد ، اثر کند.
    تغييرات يک ليست از قبيل تغيير دادن C با يک goose روي ديگري نيز تاثير مي‌گذارد setf (third foo) "goose) که اين تغيير نتيجه را به صورت (a b goose) تغيير مي‌دهد اما bar هم تغيير مي‌کند (X b goose) که ممکن است يک نتيجه? غير منتظره باشد.

    + ليسپ 
    زبان برنامه نويسي ليسپ توسط جان مک کارتي در سال 1958 در حالي که در مؤسسه? فناوري ماساچوست (MIT) بود ابداع شد.مک کارتي طرح خودش را در يک مقاله? مرتبط با انجمن ماشين آلات کامپيوتري در سال 1960 منتشر کرد.طرح وي در ابتدا به صورت «بخش اول:توابع بازگشتي از ديد عبارت‌هاي نمادين و محاسبه? آنها توسط ماشين» ارائه شد و بخش دوم آن هيچگاه منتشر نشد.وي نشان داد که با يک تعداد ساده و کمي از عملگرها و علمتگذاري توابع مي‌توان يک زبان تورينگ کامل براي الگوريتم‌ها ايجاد کرد. زبان پردازش اطلاعات اولين زبان هوش مصنوعي بود. از سال 1955 يا 1956 و پيش از آن ايده‌هاي بسياري بر زبان ليسپ وارد شد از جمله پردازش ليست و توابع بازگشتي که در زبان ليسپ به کار برده شد. ثبت‌هاي اصلي مک کارتي به صورت عبارت‌هاي غير نمادين که خواستار تفسير کردن و برگرداندن به عبارت‌هاي نمادين بود.به عنوان مثال عبارت غير نمادين car[cons[A,B]] معادل عبارت نمادين (car (cons A B)بود که در زبان ليسپ به کار گرفته شده بود.برنامه نويسان به سرعت عبارت نمادين را انتخاب و عبارت‌هاي غير نمادين را ترک کردند.
    ليسپ براي اولين بار توسط استفان راسل روي يک کامپيوتر IBM 704 اجرا شد. راسل مقاله? مک کارسي را مطالعه کرد و دريافت که توابع ليسپ مي‌توانند در کد ماشين اجرا شوند. اين نتيجه از مطالعه و دريافت راسل نشان مي‌دهد که مفسر ليسپ مي‌توانست براي اجراي برنامه‌هاي ليسپ و ارزيابي صحيح عبارت ليسپ استفاده شود.
    دو زبان اسمبلي به عنوان دو عمليات اصلي و ابتدائي تجزيه و جدا کردن عناصر اصلي ليست براي IBM 704 شد.اين دو زبان اسمبلي car (مضمون آدرس ثبات) و cdr (محتواي کاهش ميزان ثبات‌ها) نسخه? ليسپ هنوز ازcar وcdr براي عملياتي که اولين عنصر در يک ليست و باقي مانده? ليست را برميگرداند،استفاده مي‌کند.
    اولين کامپايلر تکميل شده? ليسپ،در سال 1962توسط تام هارت و مايک لوين در MIT اجرا شد، اين کامپالر معرفي شده مدل ليسپ با کامپايلر نحوي در هر کامپايل و ترجمه? توابع مي‌تواند به طور رايگان در هم بياميزد.
    زبان به کار گرفته شده در ثبت هارت و لوين نسبت به کدهاي ابتدائي مک کارتي به شيوه? ليسپ مدرن و جديد نزديک تر مي‌باشد.
    پيوستن به هوش مصنوعي:
    بعد از شروع ليسپ ، ليسپ به انجمن تحقيقاتي هوش مصنوعي پيوست ، خصوصا به سيستم‌هاي PDP ، زبان ليسپ به عنوان پياده ساز طرح کوچک زبان برنامه نويسي استفاده مي‌شود که مبنايي براي سيستم معروف هوش مصنوعي SHRLU بود.
    در سال 1970 تحقيقات علمي هوش مصنوعي به شاخه‌هاي تجاري انشعاب پيدا کرد که کارايي سيستم ليسپ موجود در اين زمينه يک روند رو به رشد شد.
    ليسپ يک سيستم مشکل براي اجرا، مهارت کامپايلر و سخت افزار ذخيره کننده را در سال 1970 دارا باشد. بازيابي عادي حافظه ، توسط دانشجوي فارغالتحصيل MIT ( دانيل ادوارد ) گسترش داده شده ،که براي اجراي ليسپ روي سيستم‌هاي محاساتي ساخته شده بود اما راندمان آن هنوز يک مشکل بود. براي رهبري ماشين ليسپ: سخت افزار اختصاصي براي اجراي محيط ليسپ و برنامه‌هاي آن استفاده مي‌شود. پيشروي در هردو سخت افزار کامپيوتر و فناوري کامپايلر از ماشين‌هاي ليسپ از کار افتاده الهام گرفته شده‌است.
    طي شک کوشش بزرگ نسخه‌هاي بيشماري از زبان ليسپ را در يک زبان واحد متمرکز و متحد کردند(نسخه‌هاي برجسته و قابل ملاحظه‌اي شامل: اينترليسپ ، مک ليسپ ، متاليسپ ، و فرانزليسپ) زبان‌هاي جديد (ليسپ عمومي و مشترک ) در اصل يک زير مجموعه? سازگاري از نسخه‌هاي تعويض شده بود. در سال 1994 ، ANSI يک ليسپ عمومي و مشترک استاندارد منتشر کرد. ليسپ عمومي و مشترک زبان برنامه نويسي فناوري اطلاعات ANSI X3.226-1994 در آن زمان فروشگاه‌هاي جهاني براي ليسپ خيلي کوچکتر از المان بود.
    ترکيب و معنا شناسي:
    ليسپ يک عبارت جهتدار است ، برخلاف بيشتر زبان‌هاي ديگر ، بين عبارت‌ها و جمله‌ها تمايز و فرقي وجود ندارد . همه? کدها و داده‌ها به عنوان عبارت‌ها نوشته شده‌اند – زماني که يک عبارت ارزيابي مي‌شود يک مقدار ( يا يک ليستي از مقادير) را مي‌سازد ، که آن هم در داخل عبارات ديگر جاسازي مي‌شود.
    مقاله? 1958 مک کارتي دو نوع از ترکيب‌ها را معرفي کرد: عبارت نمادين Sexps هم ناميده مي‌شود ، که بازتابي از نمايش داخلي کدها و داده هاست و عبارت غير نمادين هرگز مورد توجه قرار نگرفت و تقريبا همه? زبان‌ها امروزه از عبارات نمادين استفاده مي‌کنند.
    استفاده از پرانتزگذاري‌ها تفاوت بسيار آشکار و مشهودي ميان ليسپ و ديگر زبان‌هاي برنامه نويسي ايجاد کرده‌است . اسم مستعار LISP از Lost In Stupid Parenthese و يا Lost of Irritating Supper fluous parenthese گرفته شده‌است . هرچند ترکيب عبارت‌هاي نمادين مسئولي براي توان ليسپ است ، اين ترکيب به شدت با قاعده و منظم است.
    هرچند ترکيبات ليسپ به نمادگذاري قديمي محدود نشده‌اند مي‌تواند به سبک‌هاي ديگر توسعه پيدا کند. تکيه روي عبارت‌ها ، قابليت انعطاف پذيري زيادي به زبان مي‌دهد ، زيرا توابع ليسپ به صورت ليست نوشته شده‌اند ، آنها دقيقا مانند داده‌ها مي‌توانند پردازش شوند، اين قابليت اجازه مي‌دهد برنامه‌هاي ليسپ به سادگي و راحتي نوشته شوند و به نسبت برنامه‌هاي ديگر به راحتي اداره شوند . (برنامه نويسي غير نمادين)بسياري از نسخه‌هاي زبان ليسپ با عناصر جدا شده توسط فاصله‌هاي سفيد و پرانتزگذاري شده‌ها نوشته مي‌شود. براي مثال (1 2 f00 ) يک ليست است که عنصرهاي آن سه اتم هستند ( اتم: کوچکترين عضو ليست ) : اين مقادير 1 و 2 و F00 هستند. اين مقادير ضمنا داراي نوع داده‌اي خاصي هستند ، مثلا اين ليست داراي دو عدد صحيح 1 و 2 و يک نوع داده? ويژه? ليسپ که يک Symbol يا نماد ناميده مي‌شود.
    همچنين يک ليست خالي () به عنوان يک اتم ويژه? صفر و يا پوچ معرفي شده‌است. موجوديت يک ليسپ از اتم و ليست تشکيل مي‌شود. عبات‌ها به عنوان ليست نوشته شده‌اند ، استفاده کردن از ثبت‌هاي پيشوندي ، عناصر ابتدايي در ليست نامي از يک شکل تابع ، عملگرها ، ماکروها و يا اپراتورهاي ويژه‌است.
    آرگومان‌ها باقيمانده‌هايي از ليست‌ها هستند ، براي مثال تابع list آرگومان‌ها را به عنوان يک ليست بر مي‌گرداند ، بنابراين عبارت (list ‘1 ‘2 ‘foo) ارزيابي مي‌شود و حاصل اين ارزيابي ليست (1,2,foo) مي‌باشد.
    نيازي به ارزيابي کردن اعداد نيست چون ارزيابي عدد 1 عدد 1 مي‌شود.آرگومان‌هاي مثال قبل از اعداد هستند يعني آرگومان‌هاي ويژه که اين آرگومان‌ها از ارزيابي کردن آرگومان‌ها جلوگيري مي‌کنند چون مقادير آن‌ها مشخص است.هر عبارتي که بيان مي‌شود قبل از اينکه با عبارات ديگر پيوست داده شود به صورت بازگشتي ارزيابي مي‌شود.
    (list(1 2 (list(3 4)))) در اين مثال حاصل اررزيابي به صورت ليست (1,2(3,4)) مي‌باشد ،توجه کنيد اين ليست داراي 3 آرگومان مي‌باشد ، ليست‌ها مي‌توانند به صورت تو در تو باشند . اپراتورهاي حسابگر به صورت همسان رفتار مي‌کنند.
    حاصل عبارت (+1 2 3 4 ) عدد 10 مي‌باشد. عبارت معادل عبارت بالا به صورت 1+2+3+4 مي‌باشد که از نشانگذاري ميان وندي استفاد شده‌است. اپراتورهاي حسابگر در زبان ليسپ variadic(n-ary) که زبان ليسپ توانايي پذيرفتن هر تعداد آرگومان را داراست.
    عملگرهاي ويژه ساختمان کنترل ليسپ را آماده مي‌کنند. براي مثال ، اپراتور ويژه if سه آرگومان مي‌پذيرد،اگر اولين آرگومان صفر و يا خالي باشد دومين آرگومان ارزيابي مي‌شود و در غير اين صورت ه?رگومان سوم بررسي مي‌شود . بنابر اين if(nill(list 1 2 “foo”)(list 3 4 “bar”) که تنها آرگومان (list 3 4 “bar”) بررسي مي‌شود.
    + ليسپ 

    ليسپ

    از ويکي‌پديا، دانشنامه? آزاد

    پرش به: ناوبري, جستجو

    ليسپ ليسپ يک زبان برنامه‌نويسي رايانه است که در سال ???? به وسيله? جان مک‌کارتي ابداع شده‌است. اين زبان، مانند زبان برنامه‌نويسي پرولوگ، بيشتر براي برنامه‌نويسي هوش مصنوعي مورد استفاده قرار مي‌گيرد. با توجه به اينکه زبان ليسپ از نحو ساده‌اي برخوردار است، تجزيه و پياده‌سازي آن نسبتاً با سهولت انجام مي‌شود.
    متن برنامه‌هاي ليسپ عموماً از نمادها و ليست‌هايي از نمادها تشکيل مي‌شود و بدين خاطر است که اين زبان ليسپ (مخفف پردازش ليست) ناميده شده‌است. يکي از ويژگي‌هاي جالب زبان ليسپ اين است که خود برنامه‌هاي ليسپ نيز ليست هستند و بنا بر اين، مي‌توان با برنامه‌ها به عنوان داده‌ها رفتار کرد و يا داده‌ها را به عنوان برنامه ارزيابي نمود.
    ليسپ داراي گويش‌هاي مختلفي است که بعضي از آنها داراي قابليت‌هاي شيءگرا نيز هستند. از اين ميان مي‌توان به کامن ليسپ اشاره کرد.
    در ابتدا ليسپ به عنوان علامتگذاري و نمادسازي رياضيات و براي برنامه‌هاي کامپيوتري ابداع شد.زبان ليسپ به سرعت مورد توجه برنامه نويسان از جمله براي تحقيقات علمي هوش مصنوعي قرار گرفت.ليسپ يکي از ابتدائي ز بان‌هاي برنامه نويسي مي‌باشد،ودر علوم کامپيوتر بر بسياري از تفکرات و ايده‌ها پيشگام بود.ليسپ شامل ساختمان داده? درخت،مدريت نگهداري اتوماتيک،برنامه نويسي پويا،برنامه نويسي شي گرا و کامپايلر مستقل مي‌باشد.
    نام ليسپ از زبان پردازش ليسپ گرفته شده‌است.لينک ليست يکي از قسمت‌هاي اصلي ساختمان داده? زبان ليسپ است و سورس کد ليسپ از ليست‌ها ساخته شده‌است و مي‌تواند به عنوان ساختمان داده عمل کند.پيشرفت و توسعه? سيستم ماکرو به برنامه نويسان اجازه مي‌دهد تا ترکيب‌هاي جديد ويا حتي حيطه? زبان‌هاي برنامه نويسي ويژه‌اي را ايجاد کرده و در زبان ليسپ تعبيه کنند. قابليت تبادل کدها و داده‌ها به زبان ليسپ قابليت تشخيص ترکيب‌ها را مي‌دهد،همه? کدهاي برنامه به صورت عبارت‌هاي نمادين يا ليست‌هاي پرانتز گذاري شده نوشته شده‌اند.
    يک تابع مي‌تواند توسط خودش ويا توابع ديگر فراخواني شود ويا طبق قواعد نحوي نوشتن يک ليست و استفاده از اول نام عملگرها و پيروي کردن از قواعد آرگومان‌ها ايجاد شود.به عنوان مثال تابع fداراي 3 آرگومان مي‌باشد و به صورت مقابل توانائي فراخواني را دارد و مورد استفاده قرار مي‌گيرد:

    (f x y z)

    + ليسپ 
    زبان‌هاي برنامه نويسي Lisp معمولا از يک خط دستور محاوره‌اي استفاده مي‌کنند،که مي‌تواند با يک محيط پيچيده? گسترش يافته ترکيب شود.کاربر اصطلاحات و دستورات را در خط دستور وارد کرده يا با رهبري IDE آنها را به سيستم Lisp مي‌فرستد. Lisp دستورات را مي‌خواند ، آن‌ها را ارزيابي مي‌کند و نتايج را چاپ مي‌کند. به اين دليل است که خط دستور زبان Lisp به حلقه? Read-Eval-Print يا REPL معروف است.
    نمونه? ساده‌اي از عمليات REPL در زير آمده‌است. اين يک شرح ساده‌است که بسياري از المان‌هاي Lispواقعي در آن نميايد مانند ماکروها و کوئت‌ها.
    تابع read جملات متني را به عنوان ورودي مي‌پذيرد و آنها را به ساختار ليست تجزيه مي‌کند. به عنوان مثال ، وقتي شما رشته? (+ 1 2) را در اعلان تايپ مي‌کنيد، تابع read آن را به يک ليست پيوندي حاصل از 3 المان ترجمه مي‌کند: علامت + ، عدد 1 و عدد 2 . خيلي اتفاق مي‌افتد که ليست قسمت موثري از يک کد Lisp باشد که قابل ارزيابي است.به همين دليل است که يک قطار از ليست به يک تابع نام عملگر مع مي‌دهد.
    تابع eval ساختار ليست را ارزيابي مي‌کند و نوعي ديگر از ساختار را به عنوان نتيجه باز مي‌گرداند.ارزيابي کردن لزوما تفسير کردن معني نمي‌دهد؛ بعضي سيستم‌هاي Lisp هر عبارتي را به زبان ماشين تبديل مي‌کنند. خيلي ساده است؛ به هر حال؛ براي تعريف ارزيابي به عنوان تفسير : براي ارزيابي يک ليست که نام تابع دارد ، eval ابتدا تمام آرگومان‌هاي داده شده به cdr اش را ارزيابي مي‌کند و سپس تابع را روي آن آرگومان‌ها اعمال مي‌کند.در اين مثال ، تابع عمل جمع است و به آرگومان‌هاي (1 2) اعمال مي‌شود که نتيجه 3 است.اين نتيجه? ارزيابي است.
    اين وظيفه? تابع print است که نتيجه را به کاربر نمايش دهد. براي نتيجه? ساده? 3 اين کار ناقابل است. يک عبارت که با قسمتي از ساختار ليست ارزيابي مي‌شود مياز دارد که print ليست را به حرکت در آورد و در خروجي به شکل يک عبارت S نمايش دهد.
    براي اجرا کردن يک REPL در Lisp ، تنها لازم است که اين سه تابع را اجرا کنيد و يک تابع حلقه بي نهايت را.(به طور طبيعي اجراي eval پس از اجراي عملگرهاي ويژه‌اي مانند if پيچيده خواهد شد.)يک REPL ساده به خودي خود با يک خط کد انجام شد: (loop(print(eval(red))))

    ليست در اصل تعداد کمي ساختار کنترلي دارد. منتها در تکامل و گسترش زبان تعداد زيادي به آن اضافه شدند.(عملگر اصلي شرايط در زبان Lisp که cond بود بعدا متشکل شد از ساختار if-then-else )

    برنامه نويسان در نسخه? Scheme حلقه‌ها را به صورت بازگشت دم( tail recursion ) بيان مي‌کنند. موسسات متعارف علوم کامپيوتر Scheme بعضي دانشجويان را متعاقد مي‌کند که تنها راه تکرار در زبان Lisp استفاده از بازگشت دم است؛ اين اشتباه است. تمامي نسخه‌هاي متداول ديده شده از Lisp داراي ساختارهاي الزامي براي تکرار هستند.درScheme دستور do به عنوان دستور حلقه پيچيده? Lisp است. علاوه بر اين مساله? اصلي که شي گرايي را مهمتر از مساله? فاعلي کرده اين است که Scheme نيازهاي ويژه‌اي براي کارکردن با فراخواني دم(tail calls )دارد، در نتيجه دليل ترغيب Scheme به استفاده از بازگشت دم اين است که روش صراحتا با تعريف خود زبان پشتيباني مي‌شود . در مقابل ، ANSI Common Lisp نيازي به بهينه سازي که معمولا به حذف فراخواني دم گفته مي‌شود ندارد. در نتيجه اين حقيقت که بازگشت دم به عنوان يک جايگزين تصادفي براي استفاده از ساختارهاي مبتني بر تکرار ( مانند do dolist loop ) توصيه نمي‌شود تنها يک مساله? برتري ادبي نيست ، ولي بالقوه يکي از کارآمدهاست ( بعد از اين که اين روش فقط به عنوان يک پرش ساده به کار نرفت) و به عنوان يک تصحيح برنامه‌است .
    بعضي از ساختارهاي کنترلي Lisp عملگرهاي ويژه‌اي هستند ، هم ارز کليدواژه‌هاي ترکيبي باقي زبان‌ها. عباراتي که اين عملگرها استفاده مي‌کنند ظاهري شبيه فراخواني تابع دارد، تفاوت اينجاست که آرگومان‌ها ضرورتا نبايد ارزيابي شوند يا در مورد تکرار شايد بارها ارزيابي شوند. در مقابل اکثر زبان‌هاي برنامه نويسي ، Lisp به برنامه نويسان اجازه مي‌دهد با خود زبان ساختاهاي کنترلي را پياده سازي کنند.ساختارهاي کنترلي زيادي در ماکروهاي Lisp پياده سازي مي‌شوند و برنامه نويسان مي‌توانند هر ماکرو را گسترش دهند ،براي آناني که مي‌خواهند بدانند چطور کار مي‌کند.
    هر دوي Lisp Commonو Scheme داراي عملگرهاي کنترلي غير محلي هستند.تفاوت اين عملگرها يکي از عميق ترين تفاوت‌ها مابين اين دو نسخه? زبان است. Scheme از ورودي مستمر با استفاده از روش call/cc پشتيباني مي‌کند ، که به برنامه اجازه? ذخيره ( و بعدا بازيابي کردن) يک عمليات ويژه را مي‌دهد . Common Lisp از ورودي مستمر پشتيباني نمي‌کند ولي از راه‌هاي زيادي براي انجام رهايي از تکرار پشتيباني مي‌کند.

    + پرل 
    تاريخچه

    پرل در سال 1987 توسط لري وال منتشر شد. زبان پرل بطور وسيعي ساختار خود را از زبان C و بسياري از خصوصيات خود را مديون زبانهاي AWK , LISP , SED , SH مي باشد. در حال حاضر مي‌توان پرل را در بيش از ?? سيستم عامل بکار گرفت، و کتابخانه CPAN بيش از ????? ماژول را با کد منبع در اختيارتان مي گذارد.


    [ويرايش] قابليت‌ها

    [ويرايش] کاربرد پرل

    پرل را امروزه در زمينه هاي هوش مصنوعي، ژنتيک، نظامي، تحقيقاتي، صنعتي و بطور گسترده اي در اينترنت ميتوان يافت . نوشتن يک بانک اطلاعاتي، صفحه گسترده و يا يک وب سرور شايد با پرل کار عاقلانه‌اي به نظر نرسد، ولي امکانپذير است.


    [ويرايش] پرل به عنوان يک زبان چسبنده (Glue Language)

    پرل به عنوان يک زبان چسبنده مي تواند در زبان‌هاي ديگر مورد استفاده قرار گيرد. به طور مثال مي‌توانيد در برنامه هاي .NET از پرل براي پردازش متن و يا هر چيز ديگري استفاده کنيد. اين قابليت تنها به .NET محدود نمي‌شود و پرل را مي توان در زبان‌هاي ديگر برنامه نويسي بدون در نظر گرفتن پلتفرم ان استفاده کرد.

    [ويرايش] پرل به عنوان يک زبان (Cross Platform)

    جالب است بدانيد نرم افزاري که شما تحت سيستم عامل LINUX و يا MAC نوشته‌ايد روي سيستم عامل WINDOWS و UNIX هم اجرا مي‌شود. قابليت (Cross Platform) به شما امکان توسعه نرم افزارتان را بر روي هر سيستم عاملي فراهم مي‌کند.

    [ويرايش] پرل و CGI

    با پا به عرصه گذاشتن CGI به صفحات وب زبان پرل به خاطر قدرت بالا در پردازش متن و تطبيق الگو (Regular Expressions)، در جمله زبانهايي قرار گرفت که بطور وسيعي براي نوشتن CGI بکار گرفته مي‌شود.

    [ويرايش] پرل و شبکه

    به خاطر قدرت بسيار پرل درزمينه برنامه نويسي سيستم‌هاي شبکه بسياري از متخصصين شبکه و هکرها از اين قافله عقب نمانده و امروزه شاهد اين هستيم که بسياري از برنامه هاي مديريت شبکه، سيستم‌هاي Spidering و Exploit ها به زبان پرل نوشته مي‌شود.


    نکته‌اي که باعث محبوبيت زبان پرل در ميان برنامه نويسان شده است اپن سورس بودن اين زبان مي‌باشد.

    + جاوا 
    جاوا (به انگليسي: Java) يک زبان برنامه‌نويسي شئ‌گراست که شرکت سان مايکروسيستمز آن را ابداع کرده‌است. زبان جاوا شبيه به ++C است اما مدل شيءگرايي آسان‌تري دارد و از قابليت‌هاي سطح پايين کمتري پشتيباني مي‌کند. يکي از قابليت‌هاي اصلي جاوا اين است که مديريت حافظه را بطور خودکار انجام مي‌دهد. ضريب اطمينان عملکرد برنامه‌هاي نوشته‌شده به اين زبان بالا است و وابسته به سيستم عامل خاصي نيست، به عبارت ديگر مي‌توان آن را روي هر رايانه با هر نوع سيستم عاملي اجرا کرد. برنامه‌هاي جاوا به صورت کدهاي بيتي همگرداني (کامپايل) مي‌شوند. که مانند کد ماشين هستند و به ويژه وابسته به سيستم عامل خاصي نمي باشند.
    + هوش مصنوعي 

    هوش مصنوعي (به انگليسي: Artificial Intelligence) يا هوش ماشيني (Machine Intelligence) را بايد عرصه? پهناور تلاقي و ملاقات بسياري از دانش‌ها، علوم، و فنون قديم و جديد دانست. ريشه‌ها و ايده‌هاي اصلي آن را بايد در فلسفه، زبان‌شناسي، رياضيات، روان‌شناسي، نورولوژي، و فيزيولوژي نشان گرفت و شاخه‌ها، فروع، و کاربردهاي گوناگون و فراوان آن را در علوم رايانه، علوم مهندسي، علوم زيست‌شناسي و پزشکي، علوم ارتباطات و زمينه‌هاي بسيار ديگر.

    هوش مصنوعي به هوشي که يک ماشين از خود نشان مي‌دهد و يا به دانشي در کامپيوتر که سعي در ايجاد آن دارد گفته مي‌شود. بيشتر نوشته‌ها و مقاله‌هاي مربوط به هوش مصنوعي آن را دانش شناخت و طراحي عامل‌هاي هوشمند[?]" تعريف کرده‌اند. يک عامل هوشمند سيستمي است که با شناخت محيط اطراف خود, شانس موفقيت خود را بالا مي‌برد.[?] جان مکارتي که واژه هوش مصنوعي را در سال ???? استفاده نمود, آن را «دانش و مهندسي ساخت ماشين‌هاي هوشمند» تعريف کرده‌است. تحقيقات و جستجوهايي انجام شده براي رسيدن به ساخت چنين ماشين‌هايي مرتبط با بسياري از رشته‌هاي علمي ديگر مي‌باشد، مانند علوم رايانه، روان‌شناسي، فلسفه، عصب شناسي، علوم ادراکي، تئوري کنترل، احتمالات، بهينه سازي و منطق.

    + زبان هاي برنامه سازي 

    ‌‌زبان‌هاي برنامه‌نويسي ساختارهاي زباني‌ دستورمداري در رايانه‌ها هستند که به‌وسيله? آنها مي‌توان يک الگوريتم را به‌وسيله? ساختارهاي دستوري متفاوت براي اجراي رايانه توصيف کرد و با اين روش امکان نوشتن برنامه جهت توليد نرم‌افزارهاي جديد بوجود مي‌آيد. معمولاً هر زبان برنامه‌نويسي داراي يک محيط نرم‌افزاري براي وارد کردن متن برنامه، اجرا، همگرداني و رفع اشکال آن هستند. عموماً زبانهاي برنامه نويسي را به پنج نسل تقسيم ميکنند:

    • نسل اول زبان ماشين - زبان صفرو يک
    • نسل دوم زبانهايي مانند اسمبلي -قابل فهم تر براي انسان
    • نسل سوم زبانهايي مانند کوبول و پي ال وان و... -دستورات قابل فهم تر براي انسان و نياز به کمپايلرها
    • نسل چهارم مثل زبانهاي اوراکل و فاکس پرو و اس کيو الها - نزديک به محاوره هاي انساني
    • نسل پنج زبانهايي مانند prolog , ops5 - تمرکز بر حل مسئله و استفاده از الگوريتمهاي نوشته شده توسط برنامه نويس

    يک زبان برنامه نويسي يک زيان مصنوعي است که براي بيان محاسباتي که توسط يک ماشين (مخصوصا رايانه) قابل انجام است، طراحي شده‌است.زبان‌هاي برنامه نويسي براي ايجاد برنامه‌هايي به کار مي‌روند که رفتار يک ماشين را مشخص مي‌کنند، الگوريتم دقيق را بيان مي‌کنند، و يا روشي براي ارتباط انسانند. بسياري از زبان‌هاي برنامه نويسي تعدادي قالب از ويژگي‌هاي نوشته شده دستوري(syntax) و معنا شناسي (semantics) دارند، چرا که رايانه‌ها دستورات دقيقا مشخص نياز دارند. برخي توسط سند خصوصيات (specification document) تعيين شده‌اند. (براي مثال يک استاندارد ISO)، در حالي که برخي ديگر داراي پياده سازي غالبي مي‌باشند.(مانند Perl) اولين زبان برنامه نويسي به قبل از اختراع رايانه باز مي‌گردد، و براي هدايت رفتار ماشين‌هايي مانند دستگاه‌هاي نساجي اتوماتيک و نوازنده‌هاي پيانو به کار مي‌رفت. هزاران زبان برنامه نويسي خلق شده‌اند، بيشتر در زمينه ي رايانه، زمينه‌اي که هر ساله بسياري ديگر ايجاد مي‌شوند.

    + ليسپ 

    ليسپ

    از ويکي‌پديا، دانشنامه? آزاد

    پرش به: ناوبري, جستجو

    ليسپ ليسپ يک زبان برنامه‌نويسي رايانه است که در سال ???? به وسيله? جان مک‌کارتي ابداع شده‌است. اين زبان، مانند زبان برنامه‌نويسي پرولوگ، بيشتر براي برنامه‌نويسي هوش مصنوعي مورد استفاده قرار مي‌گيرد. با توجه به اينکه زبان ليسپ از نحو ساده‌اي برخوردار است، تجزيه و پياده‌سازي آن نسبتاً با سهولت انجام مي‌شود.
    متن برنامه‌هاي ليسپ عموماً از نمادها و ليست‌هايي از نمادها تشکيل مي‌شود و بدين خاطر است که اين زبان ليسپ (مخفف پردازش ليست) ناميده شده‌است. يکي از ويژگي‌هاي جالب زبان ليسپ اين است که خود برنامه‌هاي ليسپ نيز ليست هستند و بنا بر اين، مي‌توان با برنامه‌ها به عنوان داده‌ها رفتار کرد و يا داده‌ها را به عنوان برنامه ارزيابي نمود.
    ليسپ داراي گويش‌هاي مختلفي است که بعضي از آنها داراي قابليت‌هاي شيءگرا نيز هستند. از اين ميان مي‌توان به کامن ليسپ اشاره کرد.
    در ابتدا ليسپ به عنوان علامتگذاري و نمادسازي رياضيات و براي برنامه‌هاي کامپيوتري ابداع شد.زبان ليسپ به سرعت مورد توجه برنامه نويسان از جمله براي تحقيقات علمي هوش مصنوعي قرار گرفت.ليسپ يکي از ابتدائي ز بان‌هاي برنامه نويسي مي‌باشد،ودر علوم کامپيوتر بر بسياري از تفکرات و ايده‌ها پيشگام بود.ليسپ شامل ساختمان داده? درخت،مدريت نگهداري اتوماتيک،برنامه نويسي پويا،برنامه نويسي شي گرا و کامپايلر مستقل مي‌باشد.
    نام ليسپ از زبان پردازش ليسپ گرفته شده‌است.لينک ليست يکي از قسمت‌هاي اصلي ساختمان داده? زبان ليسپ است و سورس کد ليسپ از ليست‌ها ساخته شده‌است و مي‌تواند به عنوان ساختمان داده عمل کند.پيشرفت و توسعه? سيستم ماکرو به برنامه نويسان اجازه مي‌دهد تا ترکيب‌هاي جديد ويا حتي حيطه? زبان‌هاي برنامه نويسي ويژه‌اي را ايجاد کرده و در زبان ليسپ تعبيه کنند. قابليت تبادل کدها و داده‌ها به زبان ليسپ قابليت تشخيص ترکيب‌ها را مي‌دهد،همه? کدهاي برنامه به صورت عبارت‌هاي نمادين يا ليست‌هاي پرانتز گذاري شده نوشته شده‌اند.
    يک تابع مي‌تواند توسط خودش ويا توابع ديگر فراخواني شود ويا طبق قواعد نحوي نوشتن يک ليست و استفاده از اول نام عملگرها و پيروي کردن از قواعد آرگومان‌ها ايجاد شود.به عنوان مثال تابع fداراي 3 آرگومان مي‌باشد و به صورت مقابل توانائي فراخواني را دارد و مورد استفاده قرار مي‌گيرد:

    (f x y z)

    زبان برنامه نويسي ليسپ توسط جان مک کارتي در سال 1958 در حالي که در مؤسسه? فناوري ماساچوست (MIT) بود ابداع شد.مک کارتي طرح خودش را در يک مقاله? مرتبط با انجمن ماشين آلات کامپيوتري در سال 1960 منتشر کرد.طرح وي در ابتدا به صورت «بخش اول:توابع بازگشتي از ديد عبارت‌هاي نمادين و محاسبه? آنها توسط ماشين» ارائه شد و بخش دوم آن هيچگاه منتشر نشد.وي نشان داد که با يک تعداد ساده و کمي از عملگرها و علمتگذاري توابع مي‌توان يک زبان تورينگ کامل براي الگوريتم‌ها ايجاد کرد. زبان پردازش اطلاعات اولين زبان هوش مصنوعي بود. از سال 1955 يا 1956 و پيش از آن ايده‌هاي بسياري بر زبان ليسپ وارد شد از جمله پردازش ليست و توابع بازگشتي که در زبان ليسپ به کار برده شد. ثبت‌هاي اصلي مک کارتي به صورت عبارت‌هاي غير نمادين که خواستار تفسير کردن و برگرداندن به عبارت‌هاي نمادين بود.به عنوان مثال عبارت غير نمادين car[cons[A,B]] معادل عبارت نمادين (car (cons A B)بود که در زبان ليسپ به کار گرفته شده بود.برنامه نويسان به سرعت عبارت نمادين را انتخاب و عبارت‌هاي غير نمادين را ترک کردند.
    ليسپ براي اولين بار توسط استفان راسل روي يک کامپيوتر IBM 704 اجرا شد. راسل مقاله? مک کارسي را مطالعه کرد و دريافت که توابع ليسپ مي‌توانند در کد ماشين اجرا شوند. اين نتيجه از مطالعه و دريافت راسل نشان مي‌دهد که مفسر ليسپ مي‌توانست براي اجراي برنامه‌هاي ليسپ و ارزيابي صحيح عبارت ليسپ استفاده شود.
    دو زبان اسمبلي به عنوان دو عمليات اصلي و ابتدائي تجزيه و جدا کردن عناصر اصلي ليست براي IBM 704 شد.اين دو زبان اسمبلي car (مضمون آدرس ثبات) و cdr (محتواي کاهش ميزان ثبات‌ها) نسخه? ليسپ هنوز ازcar وcdr براي عملياتي که اولين عنصر در يک ليست و باقي مانده? ليست را برميگرداند،استفاده مي‌کند.
    اولين کامپايلر تکميل شده? ليسپ،در سال 1962توسط تام هارت و مايک لوين در MIT اجرا شد، اين کامپالر معرفي شده مدل ليسپ با کامپايلر نحوي در هر کامپايل و ترجمه? توابع مي‌تواند به طور رايگان در هم بياميزد.
    زبان به کار گرفته شده در ثبت هارت و لوين نسبت به کدهاي ابتدائي مک کارتي به شيوه? ليسپ مدرن و جديد نزديک تر مي‌باشد.
    پيوستن به هوش مصنوعي:
    بعد از شروع ليسپ ، ليسپ به انجمن تحقيقاتي هوش مصنوعي پيوست ، خصوصا به سيستم‌هاي PDP ، زبان ليسپ به عنوان پياده ساز طرح کوچک زبان برنامه نويسي استفاده مي‌شود که مبنايي براي سيستم معروف هوش مصنوعي SHRLU بود.

    + ليسپ 

    دستورالعمل‌هاي پردازش ليست:
    ليسپ دستورالعمل‌هاي زيادي را براي دستيابي و کنترل ليست‌ها فراهم مي‌کند . ليست‌ها مي‌توانند مستقيما با پردازه? ليست ايجاد شوند .ليست هر تعدادي از آرگومان‌ها را مي‌پذيرد و تعدادي از آرگومان‌ها را بر مي‌گرداند.

    (list 1 2 ‘a 3 ); Output : (1 2 a 3 ) (list 1 ‘(2 3) 4 ); Output : (1 (2 3) 4)

    به اين دليل راهي که ليست‌ها ايجادمي شوند از جفت‌هاي Cons (Car,Cdr) پردازه? Cons مي‌تواند براي اضافه کردن يک عنصر به جلوي يک ليست استفاده شود. توجه کنيد که پردازه? Cons در هدايت و به کار بردن آرگومان‌هاي ليست نامتقارن است ، بدين دليل روش‌هاي ليست‌ها ايجاد مي‌شوند.

    (Cons 1 ‘(2 3)); Output: (1 2 3 ) (Cons ’(1 2) ‘(3 4)) Output : ((1 2) 3 4)

    پردازه? Oppend دو يا چند ليست را با هم ادغام مي‌کند و يک ليست واحد ايجاد مي‌کند زيرا ليست ليسپ يک لينک ليست است و پيچيدگي زماني الحاق کردن ليست‌ها از مرتبه? پيچيدگي زماني O(n) مي‌باشد.
    ساختار اشتراکي: ليست‌هاي ليسپ لينک ليست‌هاي ساده مي‌توانند با يکي ديگر از ليست‌ها در ساختمان مشترک باشند به عبارت ديگر دو ليست مي‌توانند دم يکساني داشته باشنديا رشته? پاياني از Cons‌هاي يکساني داشته باشند مثلا:

    (setf foo (list "a "b "c)) (setf bar (cons "x (cdr foo)))

    ليست foo و bar به ترتيب به صورت (a b c) و (X b c ) هستند هرچند دم (b c ) در هر دو ليست ساختار يکساني دارند ولي مانند هم نيستند، خانه‌هاي Cons اشاره گر به b و c در محل حافظه? يکساني براي هردو ليست قرار دارد.
    ساختار اشتراکي سريع تر از کپي کردن مي‌تواند به صورت چشمگيري کارايي را بهبود بخشند. هرچند ، اين مهارت مي‌تواند متقابلا در راه‌هاي نامطلوب با عملکردهايي که تغييرات ليست‌هاي گذشته روي آرگومان‌هاي آن تاثير بگذارد ، اثر کند.
    تغييرات يک ليست از قبيل تغيير دادن C با يک goose روي ديگري نيز تاثير مي‌گذارد setf (third foo) "goose) که اين تغيير نتيجه را به صورت (a b goose) تغيير مي‌دهد اما bar هم تغيير مي‌کند (X b goose) که ممکن است يک نتيجه? غير منتظره باشد.
    زبان‌هاي برنامه نويسي Lisp معمولا از يک خط دستور محاوره‌اي استفاده مي‌کنند،که مي‌تواند با يک محيط پيچيده? گسترش يافته ترکيب شود.کاربر اصطلاحات و دستورات را در خط دستور وارد کرده يا با رهبري IDE آنها را به سيستم Lisp مي‌فرستد. Lisp دستورات را مي‌خواند ، آن‌ها را ارزيابي مي‌کند و نتايج را چاپ مي‌کند. به اين دليل است که خط دستور زبان Lisp به حلقه? Read-Eval-Print يا REPL معروف است.
    نمونه? ساده‌اي از عمليات REPL در زير آمده‌است. اين يک شرح ساده‌است که بسياري از المان‌هاي Lispواقعي در آن نميايد مانند ماکروها و کوئت‌ها.
    تابع read جملات متني را به عنوان ورودي مي‌پذيرد و آنها را به ساختار ليست تجزيه مي‌کند. به عنوان مثال ، وقتي شما رشته? (+ 1 2) را در اعلان تايپ مي‌کنيد، تابع read آن را به يک ليست پيوندي حاصل از 3 المان ترجمه مي‌کند: علامت + ، عدد 1 و عدد 2 . خيلي اتفاق مي‌افتد که ليست قسمت موثري از يک کد Lisp باشد که قابل ارزيابي است.به همين دليل است که يک قطار از ليست به يک تابع نام عملگر مع مي‌دهد.
    تابع eval ساختار ليست را ارزيابي مي‌کند و نوعي ديگر از ساختار را به عنوان نتيجه باز مي‌گرداند.ارزيابي کردن لزوما تفسير کردن معني نمي‌دهد؛ بعضي سيستم‌هاي Lisp هر عبارتي را به زبان ماشين تبديل مي‌کنند. خيلي ساده است؛ به هر حال؛ براي تعريف ارزيابي به عنوان تفسير : براي ارزيابي يک ليست که نام تابع دارد ، eval ابتدا تمام آرگومان‌هاي داده شده به cdr اش را ارزيابي مي‌کند و سپس تابع را روي آن آرگومان‌ها اعمال مي‌کند.در اين مثال ، تابع عمل جمع است و به آرگومان‌هاي (1 2) اعمال مي‌شود که نتيجه 3 است.اين نتيجه? ارزيابي است.
    اين وظيفه? تابع print است که نتيجه را به کاربر نمايش دهد. براي نتيجه? ساده? 3 اين کار ناقابل است. يک عبارت که با قسمتي از ساختار ليست ارزيابي مي‌شود مياز دارد که print ليست را به حرکت در آورد و در خروجي به شکل يک عبارت S نمايش دهد.
    براي اجرا کردن يک REPL در Lisp ، تنها لازم است که اين سه تابع را اجرا کنيد و يک تابع حلقه بي نهايت را.(به طور طبيعي اجراي eval پس از اجراي عملگرهاي ويژه‌اي مانند if پيچيده خواهد شد.)يک REPL ساده به خودي خود با يک خط کد انجام شد: (loop(print(eval(red))))

    ليست در اصل تعداد کمي ساختار کنترلي دارد. منتها در تکامل و گسترش زبان تعداد زيادي به آن اضافه شدند.(عملگر اصلي شرايط در زبان Lisp که cond بود بعدا متشکل شد از ساختار if-then-else )

    برنامه نويسان در نسخه? Scheme حلقه‌ها را به صورت بازگشت دم( tail recursion ) بيان مي‌کنند. موسسات متعارف علوم کامپيوتر Scheme بعضي دانشجويان را متعاقد مي‌کند که تنها راه تکرار در زبان Lisp استفاده از بازگشت دم است؛ اين اشتباه است. تمامي نسخه‌هاي متداول ديده شده از Lisp داراي ساختارهاي الزامي براي تکرار هستند.درScheme دستور do به عنوان دستور حلقه پيچيده? Lisp است. علاوه بر اين مساله? اصلي که شي گرايي را مهمتر از مساله? فاعلي کرده اين است که Scheme نيازهاي ويژه‌اي براي کارکردن با فراخواني دم(tail calls )دارد، در نتيجه دليل ترغيب Scheme به استفاده از بازگشت دم اين است که روش صراحتا با تعريف خود زبان پشتيباني مي‌شود . در مقابل ، ANSI Common Lisp نيازي به بهينه سازي که معمولا به حذف فراخواني دم گفته مي‌شود ندارد. در نتيجه اين حقيقت که بازگشت دم به عنوان يک جايگزين تصادفي براي استفاده از ساختارهاي مبتني بر تکرار ( مانند do dolist loop ) توصيه نمي‌شود تنها يک مساله? برتري ادبي نيست ، ولي بالقوه يکي از کارآمدهاست ( بعد از اين که اين روش فقط به عنوان يک پرش ساده به کار نرفت) و به عنوان يک تصحيح برنامه‌است .
    بعضي از ساختارهاي کنترلي Lisp عملگرهاي ويژه‌اي هستند ، هم ارز کليدواژه‌هاي ترکيبي باقي زبان‌ها. عباراتي که اين عملگرها استفاده مي‌کنند ظاهري شبيه فراخواني تابع دارد، تفاوت اينجاست که آرگومان‌ها ضرورتا نبايد ارزيابي شوند يا در مورد تکرار شايد بارها ارزيابي شوند. در مقابل اکثر زبان‌هاي برنامه نويسي ، Lisp به برنامه نويسان اجازه مي‌دهد با خود زبان ساختاهاي کنترلي را پياده سازي کنند.ساختارهاي کنترلي زيادي در ماکروهاي Lisp پياده سازي مي‌شوند و برنامه نويسان مي‌توانند هر ماکرو را گسترش دهند ،براي آناني که مي‌خواهند بدانند چطور کار مي‌کند.
    هر دوي Lisp Commonو Scheme داراي عملگرهاي کنترلي غير محلي هستند.تفاوت اين عملگرها يکي از عميق ترين تفاوت‌ها مابين اين دو نسخه? زبان است. Scheme از ورودي مستمر با استفاده از روش call/cc پشتيباني مي‌کند ، که به برنامه اجازه? ذخيره ( و بعدا بازيابي کردن) يک عمليات ويژه را مي‌دهد . Common Lisp از ورودي مستمر پشتيباني نمي‌کند ولي از راه‌هاي زيادي براي انجام رهايي از تکرار پشتيباني مي‌کند.

    + ليسپ 
    در سال 1970 تحقيقات علمي هوش مصنوعي به شاخه‌هاي تجاري انشعاب پيدا کرد که کارايي سيستم ليسپ موجود در اين زمينه يک روند رو به رشد شد.
    ليسپ يک سيستم مشکل براي اجرا، مهارت کامپايلر و سخت افزار ذخيره کننده را در سال 1970 دارا باشد. بازيابي عادي حافظه ، توسط دانشجوي فارغالتحصيل MIT ( دانيل ادوارد ) گسترش داده شده ،که براي اجراي ليسپ روي سيستم‌هاي محاساتي ساخته شده بود اما راندمان آن هنوز يک مشکل بود. براي رهبري ماشين ليسپ: سخت افزار اختصاصي براي اجراي محيط ليسپ و برنامه‌هاي آن استفاده مي‌شود. پيشروي در هردو سخت افزار کامپيوتر و فناوري کامپايلر از ماشين‌هاي ليسپ از کار افتاده الهام گرفته شده‌است.
    طي شک کوشش بزرگ نسخه‌هاي بيشماري از زبان ليسپ را در يک زبان واحد متمرکز و متحد کردند(نسخه‌هاي برجسته و قابل ملاحظه‌اي شامل: اينترليسپ ، مک ليسپ ، متاليسپ ، و فرانزليسپ) زبان‌هاي جديد (ليسپ عمومي و مشترک ) در اصل يک زير مجموعه? سازگاري از نسخه‌هاي تعويض شده بود. در سال 1994 ، ANSI يک ليسپ عمومي و مشترک استاندارد منتشر کرد. ليسپ عمومي و مشترک زبان برنامه نويسي فناوري اطلاعات ANSI X3.226-1994 در آن زمان فروشگاه‌هاي جهاني براي ليسپ خيلي کوچکتر از المان بود.
    ترکيب و معنا شناسي:
    ليسپ يک عبارت جهتدار است ، برخلاف بيشتر زبان‌هاي ديگر ، بين عبارت‌ها و جمله‌ها تمايز و فرقي وجود ندارد . همه? کدها و داده‌ها به عنوان عبارت‌ها نوشته شده‌اند – زماني که يک عبارت ارزيابي مي‌شود يک مقدار ( يا يک ليستي از مقادير) را مي‌سازد ، که آن هم در داخل عبارات ديگر جاسازي مي‌شود.
    مقاله? 1958 مک کارتي دو نوع از ترکيب‌ها را معرفي کرد: عبارت نمادين Sexps هم ناميده مي‌شود ، که بازتابي از نمايش داخلي کدها و داده هاست و عبارت غير نمادين هرگز مورد توجه قرار نگرفت و تقريبا همه? زبان‌ها امروزه از عبارات نمادين استفاده مي‌کنند.
    استفاده از پرانتزگذاري‌ها تفاوت بسيار آشکار و مشهودي ميان ليسپ و ديگر زبان‌هاي برنامه نويسي ايجاد کرده‌است . اسم مستعار LISP از Lost In Stupid Parenthese و يا Lost of Irritating Supper fluous parenthese گرفته شده‌است . هرچند ترکيب عبارت‌هاي نمادين مسئولي براي توان ليسپ است ، اين ترکيب به شدت با قاعده و منظم است.
    هرچند ترکيبات ليسپ به نمادگذاري قديمي محدود نشده‌اند مي‌تواند به سبک‌هاي ديگر توسعه پيدا کند. تکيه روي عبارت‌ها ، قابليت انعطاف پذيري زيادي به زبان مي‌دهد ، زيرا توابع ليسپ به صورت ليست نوشته شده‌اند ، آنها دقيقا مانند داده‌ها مي‌توانند پردازش شوند، اين قابليت اجازه مي‌دهد برنامه‌هاي ليسپ به سادگي و راحتي نوشته شوند و به نسبت برنامه‌هاي ديگر به راحتي اداره شوند . (برنامه نويسي غير نمادين)بسياري از نسخه‌هاي زبان ليسپ با عناصر جدا شده توسط فاصله‌هاي سفيد و پرانتزگذاري شده‌ها نوشته مي‌شود. براي مثال (1 2 f00 ) يک ليست است که عنصرهاي آن سه اتم هستند ( اتم: کوچکترين عضو ليست ) : اين مقادير 1 و 2 و F00 هستند. اين مقادير ضمنا داراي نوع داده‌اي خاصي هستند ، مثلا اين ليست داراي دو عدد صحيح 1 و 2 و يک نوع داده? ويژه? ليسپ که يک Symbol يا نماد ناميده مي‌شود.
    همچنين يک ليست خالي () به عنوان يک اتم ويژه? صفر و يا پوچ معرفي شده‌است. موجوديت يک ليسپ از اتم و ليست تشکيل مي‌شود. عبات‌ها به عنوان ليست نوشته شده‌اند ، استفاده کردن از ثبت‌هاي پيشوندي ، عناصر ابتدايي در ليست نامي از يک شکل تابع ، عملگرها ، ماکروها و يا اپراتورهاي ويژه‌است.
    آرگومان‌ها باقيمانده‌هايي از ليست‌ها هستند ، براي مثال تابع list آرگومان‌ها را به عنوان يک ليست بر مي‌گرداند ، بنابراين عبارت (list ‘1 ‘2 ‘foo) ارزيابي مي‌شود و حاصل اين ارزيابي ليست (1,2,foo) مي‌باشد.
    نيازي به ارزيابي کردن اعداد نيست چون ارزيابي عدد 1 عدد 1 مي‌شود.آرگومان‌هاي مثال قبل از اعداد هستند يعني آرگومان‌هاي ويژه که اين آرگومان‌ها از ارزيابي کردن آرگومان‌ها جلوگيري مي‌کنند چون مقادير آن‌ها مشخص است.هر عبارتي که بيان مي‌شود قبل از اينکه با عبارات ديگر پيوست داده شود به صورت بازگشتي ارزيابي مي‌شود.
    (list(1 2 (list(3 4)))) در اين مثال حاصل اررزيابي به صورت ليست (1,2(3,4)) مي‌باشد ،توجه کنيد اين ليست داراي 3 آرگومان مي‌باشد ، ليست‌ها مي‌توانند به صورت تو در تو باشند . اپراتورهاي حسابگر به صورت همسان رفتار مي‌کنند.
    حاصل عبارت (+1 2 3 4 ) عدد 10 مي‌باشد. عبارت معادل عبارت بالا به صورت 1+2+3+4 مي‌باشد که از نشانگذاري ميان وندي استفاد شده‌است. اپراتورهاي حسابگر در زبان ليسپ variadic(n-ary) که زبان ليسپ توانايي پذيرفتن هر تعداد آرگومان را داراست.
    عملگرهاي ويژه ساختمان کنترل ليسپ را آماده مي‌کنند. براي مثال ، اپراتور ويژه if سه آرگومان مي‌پذيرد،اگر اولين آرگومان صفر و يا خالي باشد دومين آرگومان ارزيابي مي‌شود و در غير اين صورت ه?رگومان سوم بررسي مي‌شود . بنابر اين if(nill(list 1 2 “foo”)(list 3 4 “bar”) که تنها آرگومان (list 3 4 “bar”) بررسي مي‌شود.

    عبارت‌هاي لاندا(Lambda) :
    ديگر عبارت‌هاي ويژه لاندا مي‌باشد که براي وصل کردن متغيرها به مقاديرشان که درون يک عبارت ارزيابي مي‌شوند استفاده مي‌شود. اين عملگر همچنين براي ايجاد کردن توابع هم استفاده مي‌شود. آرگومان‌هاي درون لاندا يک ليستي از آرگومان‌ها هستند و عبارت ارزيابي توابع مي‌باشند. مقادير بازگشتي مقاديري از عبارت قبلي که ارزيابي شده‌اند هستند.
    عبارت (Lambda(arg)(+arg1)) زماني که اين تابع به کار برده مي‌شود به صورت يک تابع ارزيابي مي‌شود و وظيفه? اين تابع معرفي کردن يک آرگومان و اتصال دادن آرگومان به arg و در نهايت برگرداندن يک عدد بزرگتر از آرگومان قبلي مي‌باشد عبارت‌هاي لاندا خيلي متفاوت با نام تابع رفتار نمي‌کند بنابراين اگر در عبارت (Lambda(arg)(+arg1))5->6 عدد 5 را وارد کنيم خروجي آن 6 مي‌شود. اتم‌ها : در نسخه? اصلي ليسپ دو نوع داده? ابتدايي وجود دارد: اتم‌ها و ليست‌ها يک ليست يک رشته? منظم و محدودي از عناصر مي‌باشد ، که هر عنصر در درون خودش يکي از اين اتم‌ها و يا ليست‌ها را دارد و يک اتم يک عدد يا يک نماد مي‌باشد.
    در اصل يک نماد يک رقم منحصر به فرد مي‌باشدو به عنوان يک رشته? عددي در سورس کد نوشته شده و هر دو به عنوان يک نام متغير و يک رقم داده‌اي در پردازش نمادين استفاده مي‌شود براي مثال list(foo(BAR 1)2) شامل سه عنصر : Symbol foo و list(BAR 1) و عدد 2 مي‌باشد. تفاوت اصلي بين اتم‌ها و ليست‌ها اين است که اتم‌ها تغيير ناپذير و منحصر به فرد مي‌باشند. دو اتم که دقيقا به يک صورت و به يک روش در يک شي نوشته شده باشد در مکان متفاوتي در سورس کد ظاهر مي‌شوند، هر ليست يک شي مجزا مي‌باشد و به خاطر اينکه مستقل از ديگر ليست هاست و از ديگر ليست‌ها به وسيله? مقايسه? عملگرها مشخص مي‌شود.

    Cons‌ها و ليست‌ها:
    يک ليست ليسپ يک لينک ليست جداست، هر ذره از اين ليست يک Cons ناميده مي‌شود و از دو اشاره گر که Car و Cdr ناميده مي‌شوند ترکيب شده‌است اين دو اشاره گر به ترتيب معادل دو فيلد Data و Next در مقاله? لينک ليست مي‌باشد.
    Car -> Data Cdr -> Next

    بسياري از ساختمان داده‌ها مي‌توانند ترکيب‌هايي از خانه‌هاي Cons را داشت باشند ، يکي از اين ساختمان داده‌هاي ابتدايي ليست مخصوص ناميده مي‌شود ، يک ليست مخصوص هر دو نماد ليست خالي nill و يا خانه‌ها Cons را داراستکه در هر يک از اين خانه‌ها هر اشاره گر Car به يک داده اشاره مي‌کند (که ممکن است اين اشاره گر Cons به يک ليست اشاره کند) و يک اشاره گر Cdr به يک ليست مخصوص ديگر اشاره مي‌کند. اگر يک Cons داده به سر يک لينک ليست برده شود سپس اشاره گر Car آن به اولين عنصر از ليست و اشاره گر Cdr آن به انتهاي يک ليست اشاره مي‌کند به همين دليل عملکرد Car و Cdr را به ترتيب first و rest هم ناميده مي‌شود.
    ارايه? ليست عبارت نمادين:
    نمايش پرانتزگذلري عبارت نمادين ساختمان لينک ليست . چندين راه براي نمايش ليست يکسان به عنوان يک عبارت نمادين وجود دارد . يک خانه (Cons ) مي‌تواند به صورت نشان گذاري جفت نقطه گذاري شده نوشته شود به عنوان مثال (a.b) که در آن a يک Car و b يک Cdr است. يک ليست مخصوص بلند ممکن است به صورت يک نشان گذاري جفت نقطه گذاري شده نوشته شود .(a.(b.(c.(d.nill))))

    طبق قرارداد کوتاه شده? عبارت بالا به صورت (a b c d ) در نمادسازي ليست مي‌باشد يک ليست مخصوص ممکن است در يک ترکيبي از دو صورت (a b c.d) نوشته شود . براي سيستمي از سه Cons که آخرين Cdr آن d است.

    + هوش مصنوعي 

    تجربه هاي بدست آمده

    طراحي ماشين با توانايي هاي خاص خيلي سخت تر از فرضيات اوليه دانشمندان است. خيلي کارها که در ابتدا ساده بنظر مي رسند، موارد دقيق و عميقي در خود دارند. براي مثال "ديدن" فقط تشخيص اشيا نيست، بيکه شامل ايجاد احساس و درک محيط و درک امن و يا نا امن بودن آن ميباشد.

    همچنين توانايي فهم زباني مانند انگليسي، فرانسه و يا فارسي خيلي پيچيده تر از آن است که محققان فکر کردند. استفاده از زبانهاي برنامه نويسي مثل C و C++ و Java نيز خيلي دست و پا گير است.

    ما امروزه ميدانيم که حتي افراد کودن هم به مراتب از ماشينهايي که امروزه طراحي شده اند پيشرفته تر و آگاه تر هستند. به هيچ رباتي نميشود اطمينان داشت که برود و ظروف را از روي ميز جمع کند، بشورد و در جاظرفي بچيند و همه اين کارها را بدرستي انجام دهد. درحالي که همان افراد کودن هم اين کارها را براحتي انجام ميدهند.

    امروزه اين به اثبات رسيده که ماشينها قادر به انجام کارهايي هستند که در ابتدا براي محققان انجام آن توسط ماشينها سخت مينمود مانند

    حساب کردن و شطرنج بازي کردن.

    ما امروزه فهميده ايم که خيلي از کارهاي پيچيده انسان و حيوان مانند بالا رفتن از درخت و ساختن آشيانه، هوش بسيار بالا و دانش پيچيده اي نياز دارد که تئوريهاي ما هنوز آنها را پوشش نمي دهند. همچنين درک غرايز حيواني نيز حتي در ميان فلاسفه بسيار مشکل است.

    بسياري از محققين سعي ميکنند که موارد فوق را بدرستي درک کنند و براي آنها مکانيسمهايي طراحي کنند. طراحي شبکه هاي عصبي و مترجمهاي چند زبانه راهايي هستند که محققين براي رسيدن به اين اهداف بزرگ پي گرفته اند. همچنين محققين در تلاشند روشهايي براي ساختن سيستمهاي با مکانيزمي که بتواند انگيزه و احساس را دريافت و درک کند، ميباشند.

    بنابراين AI علاوه بر مطالعه بر روي درک و دريافت، تعليم؛ يادگيري، احساسات، ارتباطات و غيره، زمينه هاي ديگر بخصوص فلسفه، منطق، روانشناسي و همچنين مهندسي نرم افزار و علم کامپيوتر را نيز مورد مطالعه قرار ميدهد.

     <      1   2   3   4   5    >>    >