LISP(List Processing)Programming languageLISP(List Processing)
Programming language
استاد : جناب آقای مهندس گودرزی پور
ارائه دهنده : طاهره عبدوس
سرفصل مطالب
مقدمه 1
2
33
44
با LISPآشنایی
Atom & List
ها عبارت مقداردهی
اولیه توابع
و منطقی ها Predicateمقادیر
35
46
2
سرفصل مطالب
و کنترلی دستوراتشرطی
7
8
39
410
And & Orتوابع
در توابع LISPتعریف
Defineو Lambdaدستورات
MNS , PLS , Evalتوابع
کاربردها و ماکروها
311
412
3
مقدمه
زب'انLISP توس'ط 50 در اواخ'ر ده'ه John McCarthy درMIT
نویس'ی برنام'ه زبانه'ای ت'رین ق'دیمی از و اس'ت آم'ده بوج'ود
محسوب می شود.
آن ط'راحی عم'ده (هدف نم8ادی symbolicمحاس8بات
computation(
.ویژگی بارز آن یکنواختی زیاد و انعطاف پذیری آن می باشد
وی'ژگی دیگ'رLISP یکس'ان ب'ودن ن'وع (Type ) در ان'واع داده ه'ا
اج''زاء این ب''ه باش''د. -Symbolic Expression )Sمی
Expression( و از اطالع'ات اعم ه'ا داده تم'امی می گوین'د.
دستورات از این نوع هستند.
یک داده در لیسپ می تواند خودش یک برنامه
باشد.
4
LISPآشنایی با
زب'ان 1. نویس'ی برنام'ه مانن'د نویس'ی برنام'ه ه'ای تکنی'ک برنامه نویسی شی گرا، تابعی را پشتیبانی می کند.
مانن'د 2. اس'تاندارد ه'ای خصیص'ه بین در گس'ترش قاب'ل ماکروها است.
Common Lisp، ب'ه ص'ورت j مخف'ف می ش'ود، ی'ک CL ک'ه معم'وًال
ی Lispن'وع 'از ' و'س'یله' ب'ه ا'س'ت 'ک'ه ANSI *30266 – 1994
ا'س'تاندا'رد ش'ده' و 'ب'رای 'ا'س'تان'د'ا'رد 'ک'ردن 'ن'س'خه ه'ا'ی من'ش'ع'ب ش'د'ه' ی
Lisp.که' بخش هایی ا'ز آن را' دارا هستند، گسترش ی'افته است
Common Lisp :ی'ک زب'ان برنام'ه نویس'ی چن'د نمون'ه ای اس'ت که
Atom & List
S-Expression اس''ت:2ب''ه ص''ورت اتم . 1
)Atom(
)Listلیست(. 2 ج'زء مع'نی داری اس'ت ک'ه ب'ه اج'زای کوچک'تری تقس'یم نمی اتم
ش'ود و می توان'د ی'ک نم'اد ی'ا ع'دد باش'د. در زی'ر نمون'ه ه'ایی از
اتمها را مشاهده می کنید:
Atom
Atom & List
دنبال'ه ای از لیس8ت Expression ه'ا هس'تند، یع'نی اعض'ای
ی'ک لیس'ت هم می توانن'د ی'ک اتم باش'ند هم ی'ک لیس'ت دیگ'ر.
در زیر نمونه هایی از لیستها را مشاهده می کنید:
ListNil (لیست خالی)، هم اتم
هم لیست!!!
LISPبرنامه های
هم'انطور ک'ه گف'تیم برنام'ه ه'ای لیس'پ بص'ورتS-Expression
می باشند.
:با یک مثال شروع می کنیم
این عب'ارت ی'کS-Expression اس'ت و از ن'وع لیس'ت )لیس'ت
سه عضوی( می باشد.
هم'ان عب'ارت این پ'ردازش 1+2معن'ای حاص'ل و باش'د می
می باشد.3لیست عدد
در لیسپ عبارات بصورتPrefix .می باشند
اگ'ر عب'ارات ف'وق را ب'هInterpreter را + لیس'پ ب'دهیم عملگ'ر
روی دو عملوند اعمال می کند؛ ببینید:
LISPبرنامه های
را محاسبه می کنیم:(3+7)*( 3-7)حال عبارت
همیش'ه ی'ک عب'ارت ب'هInterpreter.می دهیم و عب'ارت محاس'به می شود
وق'تی ک'ه ی'کS-Expression ،ب'ه عن'وان ی'ک برنام'ه ب'ه لیس'پ داده می ش'ود
آن ا'ست.محاس8به مقدا8ر تنها کاری' که لیس'پ م'ی کند'
مقدار یابی عبارتها
می شوند:مقدار یابیعبارتها در لیسپ طبق قانون زیر
باشد: اتم یکS-Expressionاگر 1.اگ'ر عب'ارت ی'ک ع'دد باش'د حاص'ل مق'دار ی'ابی خ'ودش •
است.ی'ک • عب'ارت ی'ابی، Symbolاگ'ر مق'دار باش'د حاص'ل
مقدار منتسب به آن است.
باشد:لیست یک S-Expression اگر2.اولین عض'و آن را ب'ه عن'وان ی'ک ت'ابع می گ'یرد و آن را •
می کن'د، البت'ه قب'ل از ( Apply)روی بقی'ه اعض'اء اعم'الاین کار دیگر اعضای لیست را مقدار یابی می کند.
مقدار یابی عبارتها
عمل مقدار یابی یک عمل بازگشتی(Recursive ).است
اگ'ر ب'هInterpreter عب'ارت (F x y z ) را ب'دهیم مع'ادلF)x,y,z( در
دیگر زبانهای برنامه نویسی می باشد.
توابع و عملگرها دو چیزمتفاوت نیستند
اعم'ال می شود. 1و 2و 3 ب'ر روی +عملگ'ر ( 1 2 3 +)در عب'ارت
+ ی'ک Symbol.اس'ت ک'ه ب'ه آن ی'ک ت'ابع انتس'اب داده ش'ده است
LISPبرنامه های
داریم ک'ه ی'ک ع'دد اس'ت و حاص'ل براب'ر Atomدر برنام'ه زی'ر ی'ک
خودش است.
10 روی آرگومانه'ای خ'ود اعم'ال ش'ده و ع'دد +در برنام'ه زی'ر ت'ابع
آرگومانه'ای + را ب'ه عن'وان حاص'ل ب'از می گردان'د. قب'ل از اعم'ال
چقدر است؟aآن مقدار یابی می شوند. مقدار
زی'ر برنام'ه ت'ابع Interpreterدر کن'د می س'ه 1 س'عی روی را
آرگوم'ان دیگ'ر اعم'ال کن'د و ب'ه س'بب اینک'ه چ'نین ت'ابعی وج'ود ن'دارد
پیغام خطا می دهد.
) 1 2 3 4 ) با عبارت ( 4 3 2 1( عبارت
متفاوت است.
LISPبرنامه های
آرگومانه'ای آن مق'دار ی'ابی *در برنام'ه زی'ر قب'ل از اعم'ال ت'ابع بای'د
اول حاص'ل و هم ( 4 3)- و س'پس مق'دار ( 2 1 *)ش'وند. پس
*)ک'ه براب'ر خ'ودش اس'ت( مق'دار ی'ابی می ش'وند. در آخ'ر هم 5
- اعمال می شود.1 و5 و3روی آرگومانهای
فرض کنی'د ت'ابعی ب'ه ج'ای آرگومانه'ای ع'ددی ب'ا آرگومانه'ایی از ن'وع
را Symbolداریم ک'ه ی'ک Printدیگ'ر ک'ار کن'د. مثال ت'ابعی ب'ه ن'ام
میگ'یرد و آن را چ'اپ می کن'د. اگ'ر آن را بص'ورت زی'ر اس'تفاده ک'نیم
چه اتفاقی می افتد؟
LISPبرنامه های
بای'د Salam روی آرگوم'انش اج'را ش'ود، Print قب'ل از آنک'ه ت'ابع
ت'ابع پس ش'ود. روی Printمق'داریابی منتس'ب مق'دار روی
Salam اعم'ال می ش'ود ن'ه خ'ود Salam ح'ال اگ'ر مق'دار .Salam
معتبر نباشد با پیام خطا مواجه می شویم.
راه حل:
انتس'اب دهیم و P را ب'ه نم'اد دیگ'ر مث'ل Salamب'ه نح'وی نم'اد
بدهیم:Printعنوان آرگومان به را به Pبعد
س'اخته ایم ک'ه ی'ک لیس'ت را ب'ه Lengthفرض کنی'د ت'ابعی ب'ه ن'ام
عن'وان آرگوم'ان می گ'یرد و ط'ول آن را ب'ر می گردان'د. بیایی'د آن را
( امتح'ان ک'نیم؛ ب'ه نظ'ر ش'ما نتیج'ه چ'ه خواه'د 4 3 2 1روی لیس'ت )
شد؟
( اج'را ش'ود، لیس'ت بای'د مق'دار 4 3 2 1) قب'ل از آنک'ه ت'ابع روی
اعم'ال کن'د و 4و3و2 را روی 1 س'عی می کن'د Lispی'ابی ش'ود.
مواجه می شویم. خطاچون چنین تابعی نداریم با
راه حل:
ت'ابعی داش'ته باش'یم ک'ه تع'دادی آرگوم'ان بگ'یرد و ب'ه عن'وان مق'دار
آرگومانهای خود را بر گرداند.لیستی از
LISPبرنامه های
LISPبرنامه های
آنگاه تابع Length:را به صورت زیر می توان به کار برد
: راه حل ساده تر
قب'ل Lispاگ'ر در ه'ر دو مث'ال ف'وق می توانس'تیم ک'اری ک'نیم ک'ه
روی آرگومانه'ایش، آن را مق'داریابی نکن'د آنگ'اه ب'ا از اعم'ال ت'ابع
مواجه نمی شدیم.خطا
( در ابت'دای Single quote )‘ ب'ا ق'رار دادن ی'ک Lispاین ک'ار در
ب'ه عب'ارت و ش'ود می را Interpreterانج'ام آن گوی'د می
مقداریابی نکند.
LISPبرنامه های
مثال :
( محاس'به ش'ده اس'ت و حاص'ل ک'ل عب'ارت 2 1) + در مث'ال اول
م'انع مق'داریابی می ‘ می ش'ود. ولی در مث'ال دوم عالمت 3براب'ر
ش'ود و خ'ود لیس'ت بازگردان'ده می ش'ود. پس دو مث'ال قبلی بای'د ب'ه
صورت زیر تغییر یابند :
با همین Listدر لیسپ واقعا تابعی با نام
کارائی وجود دارد.
توابع اولیه
کلی'دی Lispنام کلم'ات از List Processing از و ش'ده گرفت'ه
همینج'ا می ت'وان ب'ه اهمیت ک'ار ب'ر روی لیس'ت ه'ا پی ب'رد. در لیس'پ
تع'دادی تواب'ع اولی'ه ب'رای ک'ار ب'ر روی رش'ته ه'ا وج'ود دارد ک'ه در زی'ر
با برخی از آنها آشنا می شویم :
CAR
این ت'ابع ی'ک آرگوم'ان از لیس'ت می گ'یرد و اولین عض'و آن را ب'ر می
گرداند:
توابع اولیه
CDR
این ت'ابع ی'ک آرگوم'ان از ن'وع لیس'ت می گ'یرد و ی'ک لیس'ت ش'امل
لیست باز می گرداند.اعضای دوم به بعد
نامه'ای ک'ه کنی'د و CARتوج'ه CDR اولی'ه س'اختار ب'ه مرب'وط
باش'ند و ممکن اس'ت درنس'خه ه'ای جدی'د و FIRSTلیس'پ می
REST و یا HEAD و TAIL.شده باشند
توابع اولیه
CONS
را ب'ه عن'وان آرگوم'ان می List و ی'ک S-Expressionاین ت'ابع ی'ک
ب'از می گردان'د ک'ه عض'و ی'ک لیس'ت -S آن هم'ان اولگ'یرد و
Expression اعضای آن همان اعضای لیست است. بقیه و
)CONS X L ( یک لیست است کهCAR آن Xو CDR آن
Lاست
LISPبرنامه های
:به مثالهای زیر توجه کنید
در مث'ال آخ'ر چ'ونNil ی'ک Symbol اس'ت و جل'و آن Quote هم
ت'ابع و محاس'به ش'ود آن مق'دار اول بای'د پس نش'ده، گذاش'ته
CONS ،مق8دار آن ب8ا ولی روی مق'دار منتس'ب اعم'ال ش'ود
!!! مثال باالیی اش یکی است
استNil خود نماد Nilدر لیسپ مقدار منتسب به نماد
LISPبرنامه های
به ط'ور کلی می ت'وان گفت ک'ه پی'اده س'ازیLisp براس'اس
Lispمی باش'د. داده ه'ا و رکورده'ا را در لیس'تهای پیون'دی
می توان بصورت زیر نگهداری کرد.
:در مثال زیر تعدادی رکورد در یک لیست ذخیره شده اند
ی'ک ب'ه لیس'ت اگ'ر Symbol ن'ام ب'ه L ن'ام ش'ود، منتس'ب
خانوادگی رکورد دوم برابر ::راه ساده تری نیز برای نوشتن عبارت فوق وجود دارد
س'اختاری ک'ه در ب'اًال مش'اهده می کنی'د همانن'د ی'ک Macro قب'ل
( در )))) CDR )CDR )CAR )CDR L( CARاز تفس'یر ب'ه ف'رم )
می آید.
هاPredicateمقادیر منطقی و
از کاربرده'ای دیگ'ر نادرس'ت Nilیکی دیگ'ر بی'ان مق'ادیر جهت
می باشد.
ب'ه منتس'ب خ'ود Nilمق'دار Nil ب'ه عب'ارات در و باش'د می
Quote.نیازی نداریم
در دادن مق'دار درس'ت نش'ان نم'اد Lispبرای از T به'ره می
بریم.
برای مث'ال ت'ابعATOM در List زی'ر را در نظ'ر بگیری'د؛ این ت'ابع
پای'ه تواب'ع و Lispج'زء گ'یرد می آرگوم'ان ی'ک ک'ه باش'د می
آن باز می گرداند.مقداری منطقی جهت اتم بودن
هاPredicateمقادیر منطقی و
اس'ت مق'دار منطقی به ت'وابعی ک'ه مق'دار برگش'تی از آنه'ا ی'ک
Predicate.گوییم
EQ
این ت'ابع دو آرگوم'ان می گ'یرد و می گوی'د ک'ه آی'ا این دو آرگوم'ان
!مربوط به یک خانه حافظه اند یا خیر
اگ'ر دوSymbol مس'اوی باش'ند در ی'ک آدرس حافظ'ه ق'رار می
Atom Tableه'ا را در ج'ایی ب'ه ن'ام Symbolگیرن'د؛ لیس'پ این
نگه'داری می کن'د. این ت'ابع در م'ورد اتم ه'ا همانن'د ت'ابع بررس'ی
عمل می کند، ببینید:تساوی
دستورات کنترلی
:قبال بررسی کردیم که
محاسبه عبارات بوسیله Lispجریان کنترلی در
صورت می پذیرد
زب'ان از مث'ال ی'ک اگ'ر Cبا ک'ه بی'نیم می و ک'نیم می ش'روع
دس'تورات ش'رطی و حلق'ه هم نداش'ته باش'یم ب'از هم می ت'وانیم
پیاده سازی نماییم:
در لیسپ بصورت احضار توابع و اجرای هر تابع روی محاسبه
آرگومانهای خودش است
دستورات شرطی
عملی'ات ش'رطی در لیس'پ بوس'یله ت'ابعCOND .انج'ام می ش'ود
آرگومانهای این تابع شامل تعداد زیادی لیست دو عضوی است:
عض'و اول ه'ر عب'ارت ی'ک لیس'ت منطقی اس'ت ک'ه می توان'د
درس'ت ی'ا غل'ط باشد.عض'و دوم ه'ر لیس'ت ی'ک عب'ارت اس'ت
ت'ابع ک'ل عن'وان ب'ه اس'ت ممکن آن حاص'ل CONDک'ه
بازگردانده شود.
Lisp اگ'ر کن'د. امتح'ان می ت'رتیب ب'ه را دوت'ایی لیس'تهای
عض'و اول ص'حیح ب'ود عض'و دوم را ب'ه عن'وان ج'واب ب'از می
گرداند وگرنه به سراغ عضو بعدی می رود.
قبل از اجرا شدن آرگومانهای خود را محاسبه و CONDتابع
مقدار یابی نمی کند.
دستورات شرطی
در مثال زیر فرض کنید مقدار منتسب بهC، X:باشد
در مث'ال ف'وق چ'ون عب'ارت(eq x ‘c ص'حیح ب'وده اس'ت، مق'دار )
cc ت'ابع فراخ'انی حاص'ل عن'وان ب'ه ’COND ش'ده برگردان'ده
است.
ه'ای برنام'ه ت'ابع Lispدراک'ثر در COND ب'ه را آخ'ر دس'تور
چرا؟( نیز می نویسند؛ T expصورت )
OR و ANDتوابع
این تواب'ع تع'داد دلخ'واهی آرگوم'ان می گیرن'د وAND ی'ا OR
آنها را بر می گردانند.
ب'ا تواب'ع معم'ولی در این اس'ت ک'ه آنه'ا ابت'دا تم'امی تف'اوت
( بلک'ه COND)مث'ل آرگومانه'ای خ'ود را مق'دار ی'ابی نمی کنن'د
محاس'به می کنن'د ت'ا ج'ایی راس'ت ب'ه چپ آنه'ا را ب'ه ت'رتیب از
حاص'ل ی'ا ANDک'ه OR دیگ'ر آن از بع'د و ش'ود معل'وم
آرگومان های بعدی را محاسبه نمی کنند.
LISPتعریف توابع در
با مط'البی ک'ه ت'ا کن'ون در م'ورد لیس'پ آموخ'تیم ح'تی برنام'ه ه'ای
انتس'ابس'اده هم نمی ت'وان نوش'ت، چ'ون ح'داقل ب'ه دس'تورات
نیاز داریم.حلقهو
چگون'ه می ت'وانیم Iteration )را در لیس'پ پی'اده )تک8رار
سازی نماییم؟
.یک برنامه لیسپ با تعریف توابع ساخته می شود
نی'از باش'د تک'رارو اگ'ر در برنام'ه ب'ه حلق'ه وج'ود ن'دارد در لیس'پ
استفاده می شود.Recursionاز
در ی'ک ت'ابع می ت'وان دنبال'ه ای از دس'تورات را نوش'ت و ح'تی
درون یک تابع توابع جدید نیز تعریف نمود.
(Lambda )دستور
ب'ر می گردان'داین دس'تور را ت'ابع ی'ک ب'رای ب'ه عن'وان مق'دار .
مث'ال ف'رض کنی'د ت'ابعی داریم ک'ه دو ع'دد را می گ'یرد و مجم'وع
آنها را باز می گرداند: آرگوم'ان دومLambda لیس'تی از آرگومانه'ای ت'ابع م'ورد نظ'ر
اس'ت و آرگوم'ان بع'دی هم مق'دار بازگش'تی ت'ابع را ب'ا توج'ه ب'ه
تعریف تابع نیست، بلکه حاصل آن یک تابع Lambdaآرگومانها نشان می دهد.
!!!است
ت'ابع مث'ال این روی x y( )+ x y( 2 3( Lambda))در )
ب'ه عن'وان حاص'ل ک'ل عب'ارات 5 اعم'ال ش'ده و 3و 2آرگومانه'ای
برگردانده می شود.
Defineدستور
همیش'ه م'ا می خ'واهیم ت'ابع را ی'ک ب'ار تعری'ف ک'نیم و ب'ه دفع'ات
ت'ابع ی'ک ک'ه اس'ت ک'افی ک'ار این ب'رای ک'نیم. اس'تفاده آن از
ی'ک Lambda)حاص'ل ب'ه را )Symbol .دهیم می انتس'اب
استفاده می کنیم:Defineبرای این کار از !!! فراموش نشود
عالمتQuote قبل از آرگومان Defineبسیار مهم است
بوسیلهDefine.می توان چند تابع تعریف کرد
دو ت'ابعPLS و MNS ب'ه ت'رتیب مجم'وع و تفاض'ل دو ع'دد را ب'ر
می گردانند:
MNS و PLSتوابع
عن'وان ب'ه ک'ه مق'دارهایی زنیم می ص'دا را ت'ابع ی'ک وق'تی
آرگوم'ان ب'ه ت'ابع داده می ش'وند در حقیقت ب'ه آرگومانه'ایی ک'ه
در تعریف تابع وجود دارند منتسب می شود.
LISPتعریف توابع در
یک دس'تور دیگ'ر ب'رای تعری'ف تواب'ع ک'ه در اک'ثر نس'خه ه'ا می
( اس'ت ک'ه ب'ه )Define Function(Defun)توانی'د اس'تفاده کنی'د
صورت زیر استفاده می شود:
برای مث'ال ت'ابعی را تعری'ف می ک'نیم ک'ه جم'ع دو ع'دد را حس'اب
کند:
با اطالع'اتی ک'ه اکن'ون درب'اره لیس'پ بدس'ت آوردیم، می ت'وانیم
اکثر توابع را در لیسپ پیاده سازی کنیم.
LISPبرنامه های
برنامه ای بنویسید که عددn را بگیرد و n:را برگرداند !
در برنام'ه ف'وق اگ'رn<2 را ب'از می گردان'د، در 1 ب'ود، مق'دار
( را بر می گرداند .)n-1(n*Factغیر این صورت مقدار )
ت'ابع خ'ودش را ص'دا می Factهم'انطور ک'ه مش'اهده می کنی'د
زند.
LISPبرنامه های
IF
این ت'ابع در اک'ثر نس'خه ه'ای جدی'د لیس'پ وج'ود دارد و ک'ار را
راحت می کند:این دس'تور<Condition ،را محاس'به می کن'د. اگ'ر درس'ت ب'ود <
<Exp1< را مق'داریابی می کن'د در غ'یر این ص'ورت <Exp2 را <
هم'ه آرگومانه'ای COND هم مث'ل IFب'از می گردان'د. توج'ه کنی'د ک'ه
خود را مقداریابی نمی کند.
حال تابعFact را با IF:می نویسیم
LISPبرنامه های
برنام'ه ای بنویس'ید ک'ه ی'ک لیس'ت را ب'ه عن'وان آرگوم'ان بگ'یرد و
هستند، پس از CDR و CARتنها دستوراتی که بلد هستیم آن را بازگرداند:طول
بهره می بریمبازگشت
حال این رابطه را تبدیل به برنامه می کنیم:•
توجه کنید که اتمNil .معادل لیست خالی است
LISPبرنامه های
ک'ه بنویس'ید ای و Lلیس'ت برنام'ه و Nع'دد بگ'یرد را N امین
Nil خ'ارج اس'ت مق'دار L از مح'دوده N را برگردان'د. اگ'ر Lعض'و
را بازگرداند:-CDR)Nامین عضو N-1 همان Lامین عضو N راهنمایی:
است)1
Evalتابع
باش'د. مثال داده برنام'هیک داده در لیس'پ خ'ودش می توان'د ی'ک
( ی'ک لیس'ت س'ه عض'وی اس'ت ک'ه می توان'د 1 2)+ ای ب'ه ش'کل
هم در نظر گرفته شود.برنامهبصورت یک
ب'ه را آنه'ا خ'واهیم می و داریم ه'ایی داده کنی'د ف'رض حال
Interpreter لیس'پ ب'دهیم ت'ا اج'را کن'د. مث'ل اینک'ه آنه'ا را در
انج'ام می Eval نوش'ته باش'یم. این ک'ار ب'ا ت'ابع Lispخ'ط فرم'ان
پذیرد. این تابع آرگومان خود را محاسبه و مقدار یابی می کند:
‘ بر عکس کار Evalمی توان گفت کار
است
ماکروها
در م'اکرو س'طحی Lispیک ط'ور ح'ال ب'ه در ت'ابع ی'ک ش'بیه
برنام'ه ن'یز ک'د اص'لی اس'ت و نماین'ده ی ی'ک تغی'یر ش'کل اس'تفاده
می باشد.
ب'ه برنام'ه نویس'ان ایج'اد ف'رم ه'ای نح'وی Lispماکروه'ا امک'ان
جدید در زبان را می دهد.
،تولی'د کن'د را نه'ایی اینک'ه کامپ'ایلر ک'د اص'لی از تواب'ع قب'ل این
احضار می شوند.
ماکروها هر عملگرCL .را می توانند استفاده کنند
کاربردها
،اس'تاندارد از کمیت'ه ی ب'زرگ انتظ'ارات ب'ا وج'ود Common Lisp ی'ک زب'ان برنام'ه نویس'ی مناس'ب ب'اقی مان'د، ک'ه اغلب در
ه8وش دانش'گاه و ی'ا محی'ط ه'ای ک'اربردی وی'ژه ک'ه در ارتب'اط ب'ا است به کار می رود. مصنوعی
بس'یاری از ک'اربرانCommon Lisp ب'رای مع'رفی زب'ان مطل'وب CL را می زنن'د ک'ه ب'ا yahooش'ان مث'ال آش'نای س'ایت بازرگ'انی
گس'ترش یافت'ه اس'ت. درض'من کاربرده'ای ک'د منب'ع ب'از م'وفقی ب'ه یک ثابت کننده نظریه: acl2 وجود دارد مثل: Common Lispزبان
Maxima : .یک سیستم جبری کامپیوتری خبرهCompo : ب'ه س'اختارهای موس'یقی اج'ازه توص'یف روش
طبیعی را می دهد. Lisa : ه'ای نماین'ده ب'رای س'اختن ق'انون تولی'د سیس'تم
نرم افزاری "هوش"
کاربردها
.به عنوان یک زبان تابعی پردازش لیست طراحی شد
.برای کارهای جستجو بسیار مناسب است
.بازیهای کامپیوتری در آن به خوبی پیاده سازی می شوند
.پردازش متن در آن به خوبی انجام می شود
تفسیر ماشین خودکار که در آن رشته هایی از نمادها می تواند
توسط رشته های دیگری جایگزین شود زمینه دیگری از کاربرد
این نرم افزار می باشد.
منابع
آموزشlisp – علی زرگر – goldsmith.ir
Paul Graham.1996. ANSI Common Lisp
Programming Languages Structures (Organick,
Forsythe, Plummer) Academic Press 1978
Artificial Intelligence (Luger) 2002
42
با تشکر از توجه شما