یکشنبه, ۳۰ دی, ۱۴۰۳ / 19 January, 2025
Common Lisp
Common Lisp، که معمولاً به صورت CL مخفف می شود، یک نوع از Lisp است که به وسیلهی ANSI ۳۰۲۶۶ - ۱۹۹۴ استاندارد شده و برای استاندارد کردن نسخه های منشعب شده ی Lisp که بخش هایی از آن را دارا هستند، گسترش یافته است. CL در واقع یک پیاده سازی نیست بلکه یک مشخصه ی زبانی است که پیاده سازی های Lisp با آن مطابقت دارد.
Common Lisp یک زبان برنامه نویسی همه منظوره است، در مقایسه با نسخه های Lispمانند Lisp Emacs و AutoLisp که زبان های جامع جاسازی شده در تولیدات ویژه هستند. برخلاف بسیاری از Lisp های اولیه، Common Lisp مانند Scheme از حوزه لغوی برای متغیرها استفاده می کند. Common Lisp یک زبان برنامه نویسی چند نمونه ای است که:
▪ تکنیک های برنلمه نویسی مانند برنامه نویسی برنامه نویسی شی گرا، تابعی و آمرانه را پشتیبانی می کند.
▪ به صورت پویا نوع دار شده است، اما با اعلان های نوع اختیاری که می تواند امنیت یا بازدهی را بهبود بخشد.
▪ قابل گسترش در بین خصیصه های استاندارد مانند ماکروها و ماکروهای خواننده است.
● نحو
Common Lisp یک Lisp است؛ که از عبارات نحوی برای دلالت بر کد و ساختمان داده استفاده می کند. فراخوانی های ماکرو و تابع به صورت لیستی با آوردن نام تابع در ابتدا نوشته شده است، مانند مثال زیر:
۲ و ۲ را جمع می کند و نتیجه ۴ می دهد؛ ( + ۲ ۲ )
به متغیر "p" مقدار ۳.۱۴۱۵ می دهد؛ (setq) p ۳.۱۴۱۵)) تعریف یک تابع که مجذور یک عدد را حساب می کند ; (defun)) square (x) (* x x))
محاسبه تابع; "۹" را برمی گرداند (square ۳) ;
● انواع داده
Common Lisp انواع داده ای زیادی حتی بیشتر از بسیاری زبان ها دارد.
● انواع اسکالر
انواع عدد شامل اعداد صحیح، کسری، ممیز شناور و اعداد مختلط می باشد. Common Lisp از bignums برای نشان دادن مقدارهای عددی با دقت و اندازه دلخواه استفاده می کند. نوع کسری، کسرها را با دقت نشان می دهد، این ویژگی در بسیاری از زبان ها وجود ندارد. Common Lisp به صورت اتوماتیک مقدارهای عددی را بین این داده ها به صورت مناسب وارد می کند.
نوع کاراکتر Common Lisp به کاراکترهای ASCII محدود نمی شود- تعجب آور نیست وقتی Lisp، ASCII را نیز شامل می شود. بعضی از پیاده سازی های مدرن به کاراکترهای یونی کد نیز اجازه استفاده می دهد.
(http://www.cliki.net/Unicode%۲۰Support)
نوع سمبل نیز در زبان های Lisp رایج است، اما عموماً خارج از آنها شناخته شده نیست. یک سمبل یک شی داده ای نامدار واحد است. سمبل ها در Lisp شبیه شناسه ها در زبان های دیگر هستند، که به عنوان متغیرها برای نگهداری ارزش ها استفاده می شوند. اگرچه، آنها بسیار عمومی تر هستند و میتوانند برای خودشان هم استفاده شوند. معمولاً وقتی یک سمبل ارزیابی می شود، مقدارش به عنوان یک متغیر برگردانده می شود. استثناهایی نیز وجود دارد: سمبل های کلمات کلیدی مثل: foo با خودشان ارزیابی می شوند و مقدارهای بولی در Common Lisp به وسیله ی سمبل های رزرو شده ی T و NIL نشان داده می شوند.
● ساختمان های داده
انواع ترتیبی در Common Lisp شامل لیست ها، بردارها، بردارهای بیتی و رشته ها می باشد. مانند Lispهای دیگر، لیست ها در Common Lisp از consها ساختمان داده با دو بخش است که car و cdr نامیده می شود. یک لیست یک زنجیره پیوندی از cons هاست. که car مربوط به cons به عضوی از یک لیست ارجاع می کند (احتمالاً لیست دیگر). هر cdr مربوط به cons، به cons بعدی اشاره می کند- - به جز آخرین cons که مقدارش به nil اشاره می کند.consها به راحتی برای پیاده سازی درخت ها و دیگر ساختمان های داده ی پیچیده استفاده می شوند: اگر چه توصیه می شود که از نمونه های کلاس یا ساختار به جای آن استفاده شود.
Common Lisp آرایه های چند بعدی را پشتیبانی می کند، و می تواند به صورت پویا در صورت نیاز آرایه ها را دوباره سایز دهی بکند. آرایه های چند بعدی می تواند برای ریاضیات ماتریسی به کار روند. بردار یک آرایه ی یک بعدی است. آرایه ها می توانند هر نوع داده ای را به عنوان اعضاء داشته باشند (حتی انواع ترکیبی در همان آرایه) یا می توانند برای شامل شدن نوع خاصی از اعضاء، تخصصی شوند مثلاً در برداری از اعداد صحیح. بسیاری از پیاده سازی ها می توانند توابع آرایه ای را وقتی که آرایه ها در نوع های تخصصی شده به کار می روند، بهینه کند. دو نوع آرایه ای تخصصی شده، استاندارد هستند: رشته برداری از کاراکترهاست در حالی که بردار بیتی، برداری از بیت ها است.
جداول Hash پیوستگی بین شی های داده ای را ذخیره می کند. هر شی ممکن است به عنوان کلید یا مقدار استفاده شود. جداول Hash نیز مانند آرایه ها می توانند به صورت اتوماتیک در مواقع نیاز دوباره سایزدهی شوند.
بسته ها مجموعه ای از سمبل ها هستند که به طور عمده برای جدا سازی بخش های یک برنامه به فضاهای نامی به کار می روند. یک بسته بعضی از سمبل ها را خارج کرده و به عنوان بخشی از یک واسط عمومی مشخص می کند.
ساختارها، شبیه struct ها در Cو رکوردها در پاسکال، ساختمان های داده ای پیچیده ی دلخواه با هر عدد و نوعی از زمینه ها را نشان می دهند.
● توابع
در Common Lisp، نوع داده یک نوع دادهای است. به عنوان نمونه، این امکان وجود دارد که تابعی نوشته شود که توابع دیگر را به عنوان آرگومان می پذیرد و همین طور به عنوان خروجی برمی گرداند. این خواصیت این امکان را فراهم می کند که عملیات بسیار عمومی را به توان تشریح کرد.
کتابخانه Common Lisp شدیداً به چنین توابع مرتبه بالاتری تکیه می کند. مثلاً تابع sort عملگر مقایسه را به عنوان آرگومان می پذیرد. بنابراین نه تنها می تواند هر نوع داده ای را مرتب کند بلکه ساختمان داده را نیز مطابق با یک کلید مرتب می کند.
(sort ( list ۵ ۲ ۶ ۳ ۱ ۴); >)
; لیست را با استفاده از اپراتور < به عنوان عملگر مقایسه کننده مرتب می کند.
; .رابرمی گرداند ( ۶ ۵ ۴ ۳ ۲ ۱ )
(sort (list ( ۹ a ) ( ۳ b ) ( ۴ c ) )
# ( lambda ( x y ) ( < ( car x ) ( car y ) ) ) )
لیست را مطابق با عنصر اول ( car) از هر زیر لیست مرتب می کند ;
( cb ) ( ۴ c ) ( ۹ a )را برمی گرداند.;
مدل عرض یابی برای توابع بسیار ساده است. وقتی که عرضیاب کننده با فرم (F A۱ A۲. . . ) مواجه می شود باید فرض کند که سمبولی که F نامیده می شود یکی از گزینه های زیر است:
یک عملگر ویژه ( به آسانی در یک لیست ثابت چک می شود).
یک عملگر ماکرو ( باید قبلاً تعریف شده باشد)
نام یک تابع ( پیش فرض، که ممکن است یک سمبل یا یک زیر شکل باشد که با سمبل lambda شروع می شود.
اگر F نام یک تابع باشد، آنگاه آرگومان های A۱, A۲, ... An با ترتیب چپ به راست عرض یابی می شوند و آن مقادیر را به عنوان پارامتر می گیرد.
● فضای نامی تابع
در اینجا یک تفاوت اساسی بین Common Lisp و Scheme وجود دارد.در CL، نام تابع در یک فضای نامی جستجو می شود که از فضای نامی مربوط به متغیرها جدا می باشد و فضای نامی تابع نامیده می شود. عملگرهایی که نام ها را در فضای عمومی تعریف می کنند شامل defun، flet و labels هستند.
برای فرستادن تابع با اسم به عنوان یک آرگومان به تابع دیگر، بعد از عملگر ویژه تابع که عموماً با علامت # #; خلاصه می شود استفاده کرد. مثال sort اول به تابعی اشاره می کند که نام < در فضای نامی تابع، با کد #> دارد.
مدل ارزیابی Scheme ساده تر است تنها یک فضای نامی وجود دارد و همه مکان ها در فرم ارزیابی می شوند (با هر ترتیب ) نه فقط آرگومان ها.چ گاهی برای برنامه نویسان با تجربه، کدی که در یک نسخه نوشته شده در نسخه های دیگر گیج کننده است. به طور نمونه، بسیاری از برنامه نویسان CL ممکن است از نام های متغیر توصیفی مثل لیست یا رشته استفاده کنند که در Scheme غیر مجاز است و آنها با نام های توابع برخورد پیدا می کنند. اگر چه فضای نامی مجزا برای توابع یک حسن است، یک منبع مجادله در خانواده ی Lisp می باشد. که معمولاً به عنوان Lisp-۱ و Lisp-۲ مورد ارجاع قرار می گیرد. این اسامی در مقاله ای در سال ۱۹۸۸ از ریچارد پ. گابریل ایجاد شد که به طور جامع ای دو روش را مقایسه می کند. ( http.. \ www. nhplac. com\ kent\P apers\ T echnical- I ssues. html)سرانجام، در حالی که تعریف یک تابع ( شکل befun ) یک لیست است، توابع عموماً به صورت داخلی به صورت لیست نشان داده نمی شوند.
ایران مسعود پزشکیان دولت چهاردهم پزشکیان مجلس شورای اسلامی محمدرضا عارف دولت مجلس کابینه دولت چهاردهم اسماعیل هنیه کابینه پزشکیان محمدجواد ظریف
پیاده روی اربعین تهران عراق پلیس تصادف هواشناسی شهرداری تهران سرقت بازنشستگان قتل آموزش و پرورش دستگیری
ایران خودرو خودرو وام قیمت طلا قیمت دلار قیمت خودرو بانک مرکزی برق بازار خودرو بورس بازار سرمایه قیمت سکه
میراث فرهنگی میدان آزادی سینما رهبر انقلاب بیتا فرهی وزارت فرهنگ و ارشاد اسلامی سینمای ایران تلویزیون کتاب تئاتر موسیقی
وزارت علوم تحقیقات و فناوری آزمون
رژیم صهیونیستی غزه روسیه حماس آمریکا فلسطین جنگ غزه اوکراین حزب الله لبنان دونالد ترامپ طوفان الاقصی ترکیه
پرسپولیس فوتبال ذوب آهن لیگ برتر استقلال لیگ برتر ایران المپیک المپیک 2024 پاریس رئال مادرید لیگ برتر فوتبال ایران مهدی تاج باشگاه پرسپولیس
هوش مصنوعی فناوری سامسونگ ایلان ماسک گوگل تلگرام گوشی ستار هاشمی مریخ روزنامه
فشار خون آلزایمر رژیم غذایی مغز دیابت چاقی افسردگی سلامت پوست