lisp ( lis t p rocessing) programming language

Post on 30-Dec-2015

60 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

LISP ( Lis t P rocessing) Programming language. استاد : جناب آقای مهندس گودرزی پور ارائه دهنده : طاهره عبدوس. سرفصل مطالب. مقدمه. 1. آشنایی با LISP. 2. Atom & List. 3. 3. مقداردهی عبارت ها. 4. 4. توابع اولیه. 3. 5. مقادیر منطقی و Predicate ها. 4. 6. سرفصل مطالب. - PowerPoint PPT Presentation

TRANSCRIPT

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

با تشکر از توجه شما

top related