semantics معانی Lisp چیست؟
Lisp در سال ۱۹۵۸ توسط مک کارتی ابداع شد و اولین نگارش محیط برنامه نویسی Lisp در سال ۱۹۶۰ آماده شد که شامل یک مفسر, یک کامپایلر و مکانیسم تخصیص و بازپسگیری حافظه پویا بود (بعنوان مجموعه فضای هرز شناخته شده است). یکسال بعد اولین زبان استاندارد با نام Lisp1.5 معرفی شد. پس از آن تعدادی از نسخه ها و محیط های برنامه نویسی Lisp توسعه یافته اند. مانند MacLisp، FranzLisp، InterLisp، CommonLisp، Scheme هر چند آنها در بعضی جزئیات خاص متفاوتند ولی هسته Syntax (نحو) و Semantic (معنی) آنها اساساً یکسان است. هسته را در جای دیگر معرفی خواهیم کرد. پر استفاده ترین نسخههای
Lisp ، Common Lisp و scheme هستند. در این مقاله ما Common Lisp را برای نشان دادن جنبه های مختلف Lisp با مثالهای معمولی انتخاب کرده ایم. هرچند مثالها نیز به راحتی می توانند در نسخه های دیگر Lisp سازگار شوند.
Syntax .A. (نحو) و semantics (معانی) Lisp
1. عبارات نمادین: عناصر نحوی Lisp عبارات نمادین نامیده می شوند (که به صورتS-expressionsشناخته شدهاند). داده ها و توابع (یعنی برنامه های Lisp ) بصورت عبارات نمادین نشان داده شده اند که می توانند اتم ها یا لیست ها باشند. اتم ها کلمه ای شبیه اشیا هستند. اتمها وابسته به نوع کاراکترهایی که برای شکل دادن یک اتم مجازند می توانند به انواع مختلفی تقسیم شوند. انواع اصلی عبارتنداز:
Numbers:1 234-43.14159265358979 -7.5 6.02E+23
Symbols:SymbolSym23another-one t false NILBLUE
Strings: ”This is a string””۹۷۷?” ”setq””He said: \” I’m here.\” ”
توضیح اینکه هرچند نماد خاصی مثل BLUE استفاده میشود چون مفهوم مشخص برای برنامهنویسی دارد، اما بزودی Lisp تنها ترتیبی از حروف یا تنها یک نماد است. لیستها بندی شبیه اشیاء هستند. یک لیست شامل یک پرانتز باز( دنبالهای از اعداد دلخواه که بوسیله فاصله خالی از هم جدا میشوند) و یک پرانتز بسته هستند. هر عنصر لیست میتواند یک اتم یا لیست باشد. اینها مثالهایی از لیستها هستند:
(This is a list) ((this) ((too))) () (((((((())))))))
(a b c d) (john mary tom) (loves john ?X)
(* (+ 3 4) 8) (append (a b c) (1 2 3))
(defun member (elem list)
(if (eq elem (first list)) T
(member elem (rest list))))
توضیح اینکه در بسیاری از مثالها عناصر لیست خود لیستها هستند.چنین لیستهایی، لیستهای تو در تو نامیده میشوند. در مورد تو در تویی محدودیتی وجود ندارد. برای مثال یکی از قویترین Lisp ها را شرح میدهیم: پیچیدهترین اشیاء را به راحتی میتوان نوشت. تنها چیزی که در نظر گرفته میشود درستی عدد داخل پرانتزهاست. مهم توضیح این است که معنی وابسته به یک لیست نمایش ویژه یا اتم در لیست نمایش وارد نمیشود. به این معنی که همه عبارات نمادین که در بالا توصیف شده است از لحاظ نحو برنامههای Lisp را اصلاح میکنند ولی الزاماً از لحاظ معنی (semantic) برنامهها رااصلاح نمیکنند.