ترکیب و معنا شناسی
دوشنبه 29 آذر 1389 7:25 AM
لیسپ یک عبارت جهتدار است ، برخلاف بیشتر زبانهای دیگر ، بین عبارتها و جملهها تمایز و فرقی وجود ندارد . همهٔ کدها و دادهها به عنوان عبارتها نوشته شدهاند – زمانی که یک عبارت ارزیابی میشود یک مقدار ( یا یک لیستی از مقادیر) را میسازد ، که آن هم در داخل عبارات دیگر جاسازی میشود. مقالهٔ 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”) بررسی میشود.