lisp ( lis t p rocessing) programming language

43
LISP(List Processing) Programming language ور پ ی ودرر گ دس ن ه م ای ق آ اب ن ج اد : ن س آ دوس ن ع ره ه ده : طا ن ه ه د# آرآئ

Upload: aurelia-herrera

Post on 30-Dec-2015

60 views

Category:

Documents


1 download

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

Page 1: LISP ( Lis t P rocessing) Programming language

LISP(List Processing)Programming languageLISP(List Processing)

Programming language

استاد : جناب آقای مهندس گودرزی پور

ارائه دهنده : طاهره عبدوس

Page 2: LISP ( Lis t P rocessing) Programming language

سرفصل مطالب

مقدمه 1

2

33

44

با LISPآشنایی

Atom & List

ها عبارت مقداردهی

اولیه توابع

و منطقی ها Predicateمقادیر

35

46

2

Page 3: LISP ( Lis t P rocessing) Programming language

سرفصل مطالب

و کنترلی دستوراتشرطی

7

8

39

410

And & Orتوابع

در توابع LISPتعریف

Defineو Lambdaدستورات

MNS , PLS , Evalتوابع

کاربردها و ماکروها

311

412

3

Page 4: LISP ( Lis t P rocessing) Programming language

مقدمه

زب'انLISP توس'ط 50 در اواخ'ر ده'ه John McCarthy درMIT

نویس'ی برنام'ه زبانه'ای ت'رین ق'دیمی از و اس'ت آم'ده بوج'ود

محسوب می شود.

آن ط'راحی عم'ده (هدف نم8ادی symbolicمحاس8بات

computation(

.ویژگی بارز آن یکنواختی زیاد و انعطاف پذیری آن می باشد

وی'ژگی دیگ'رLISP یکس'ان ب'ودن ن'وع (Type ) در ان'واع داده ه'ا

اج''زاء این ب''ه باش''د. -Symbolic Expression )Sمی

Expression( و از اطالع'ات اعم ه'ا داده تم'امی می گوین'د.

دستورات از این نوع هستند.

یک داده در لیسپ می تواند خودش یک برنامه

باشد.

4

Page 5: LISP ( Lis t P rocessing) Programming language

LISPآشنایی با

زب'ان 1. نویس'ی برنام'ه مانن'د نویس'ی برنام'ه ه'ای تکنی'ک برنامه نویسی شی گرا، تابعی را پشتیبانی می کند.

مانن'د 2. اس'تاندارد ه'ای خصیص'ه بین در گس'ترش قاب'ل ماکروها است.

Common Lisp، ب'ه ص'ورت j مخف'ف می ش'ود، ی'ک CL ک'ه معم'وًال

ی Lispن'وع 'از ' و'س'یله' ب'ه ا'س'ت 'ک'ه ANSI *30266 – 1994

ا'س'تاندا'رد ش'ده' و 'ب'رای 'ا'س'تان'د'ا'رد 'ک'ردن 'ن'س'خه ه'ا'ی من'ش'ع'ب ش'د'ه' ی

Lisp.که' بخش هایی ا'ز آن را' دارا هستند، گسترش ی'افته است

Common Lisp :ی'ک زب'ان برنام'ه نویس'ی چن'د نمون'ه ای اس'ت که

Page 6: LISP ( Lis t P rocessing) Programming language

Atom & List

S-Expression اس''ت:2ب''ه ص''ورت اتم . 1

)Atom(

)Listلیست(. 2 ج'زء مع'نی داری اس'ت ک'ه ب'ه اج'زای کوچک'تری تقس'یم نمی اتم

ش'ود و می توان'د ی'ک نم'اد ی'ا ع'دد باش'د. در زی'ر نمون'ه ه'ایی از

اتمها را مشاهده می کنید:

Atom

Page 7: LISP ( Lis t P rocessing) Programming language

Atom & List

دنبال'ه ای از لیس8ت Expression ه'ا هس'تند، یع'نی اعض'ای

ی'ک لیس'ت هم می توانن'د ی'ک اتم باش'ند هم ی'ک لیس'ت دیگ'ر.

در زیر نمونه هایی از لیستها را مشاهده می کنید:

ListNil (لیست خالی)، هم اتم

هم لیست!!!

Page 8: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

هم'انطور ک'ه گف'تیم برنام'ه ه'ای لیس'پ بص'ورتS-Expression

می باشند.

:با یک مثال شروع می کنیم

این عب'ارت ی'کS-Expression اس'ت و از ن'وع لیس'ت )لیس'ت

سه عضوی( می باشد.

هم'ان عب'ارت این پ'ردازش 1+2معن'ای حاص'ل و باش'د می

می باشد.3لیست عدد

در لیسپ عبارات بصورتPrefix .می باشند

اگ'ر عب'ارات ف'وق را ب'هInterpreter را + لیس'پ ب'دهیم عملگ'ر

روی دو عملوند اعمال می کند؛ ببینید:

Page 9: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

را محاسبه می کنیم:(3+7)*( 3-7)حال عبارت

همیش'ه ی'ک عب'ارت ب'هInterpreter.می دهیم و عب'ارت محاس'به می شود

وق'تی ک'ه ی'کS-Expression ،ب'ه عن'وان ی'ک برنام'ه ب'ه لیس'پ داده می ش'ود

آن ا'ست.محاس8به مقدا8ر تنها کاری' که لیس'پ م'ی کند'

Page 10: LISP ( Lis t P rocessing) Programming language

مقدار یابی عبارتها

می شوند:مقدار یابیعبارتها در لیسپ طبق قانون زیر

باشد: اتم یکS-Expressionاگر 1.اگ'ر عب'ارت ی'ک ع'دد باش'د حاص'ل مق'دار ی'ابی خ'ودش •

است.ی'ک • عب'ارت ی'ابی، Symbolاگ'ر مق'دار باش'د حاص'ل

مقدار منتسب به آن است.

باشد:لیست یک S-Expression اگر2.اولین عض'و آن را ب'ه عن'وان ی'ک ت'ابع می گ'یرد و آن را •

می کن'د، البت'ه قب'ل از ( Apply)روی بقی'ه اعض'اء اعم'الاین کار دیگر اعضای لیست را مقدار یابی می کند.

Page 11: LISP ( Lis t P rocessing) Programming language

مقدار یابی عبارتها

عمل مقدار یابی یک عمل بازگشتی(Recursive ).است

اگ'ر ب'هInterpreter عب'ارت (F x y z ) را ب'دهیم مع'ادلF)x,y,z( در

دیگر زبانهای برنامه نویسی می باشد.

توابع و عملگرها دو چیزمتفاوت نیستند

اعم'ال می شود. 1و 2و 3 ب'ر روی +عملگ'ر ( 1 2 3 +)در عب'ارت

+ ی'ک Symbol.اس'ت ک'ه ب'ه آن ی'ک ت'ابع انتس'اب داده ش'ده است

Page 12: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

داریم ک'ه ی'ک ع'دد اس'ت و حاص'ل براب'ر Atomدر برنام'ه زی'ر ی'ک

خودش است.

10 روی آرگومانه'ای خ'ود اعم'ال ش'ده و ع'دد +در برنام'ه زی'ر ت'ابع

آرگومانه'ای + را ب'ه عن'وان حاص'ل ب'از می گردان'د. قب'ل از اعم'ال

چقدر است؟aآن مقدار یابی می شوند. مقدار

زی'ر برنام'ه ت'ابع Interpreterدر کن'د می س'ه 1 س'عی روی را

آرگوم'ان دیگ'ر اعم'ال کن'د و ب'ه س'بب اینک'ه چ'نین ت'ابعی وج'ود ن'دارد

پیغام خطا می دهد.

) 1 2 3 4 ) با عبارت ( 4 3 2 1( عبارت

متفاوت است.

Page 13: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

آرگومانه'ای آن مق'دار ی'ابی *در برنام'ه زی'ر قب'ل از اعم'ال ت'ابع بای'د

اول حاص'ل و هم ( 4 3)- و س'پس مق'دار ( 2 1 *)ش'وند. پس

*)ک'ه براب'ر خ'ودش اس'ت( مق'دار ی'ابی می ش'وند. در آخ'ر هم 5

- اعمال می شود.1 و5 و3روی آرگومانهای

فرض کنی'د ت'ابعی ب'ه ج'ای آرگومانه'ای ع'ددی ب'ا آرگومانه'ایی از ن'وع

را Symbolداریم ک'ه ی'ک Printدیگ'ر ک'ار کن'د. مثال ت'ابعی ب'ه ن'ام

میگ'یرد و آن را چ'اپ می کن'د. اگ'ر آن را بص'ورت زی'ر اس'تفاده ک'نیم

چه اتفاقی می افتد؟

Page 14: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

بای'د Salam روی آرگوم'انش اج'را ش'ود، Print قب'ل از آنک'ه ت'ابع

ت'ابع پس ش'ود. روی Printمق'داریابی منتس'ب مق'دار روی

Salam اعم'ال می ش'ود ن'ه خ'ود Salam ح'ال اگ'ر مق'دار .Salam

معتبر نباشد با پیام خطا مواجه می شویم.

راه حل:

انتس'اب دهیم و P را ب'ه نم'اد دیگ'ر مث'ل Salamب'ه نح'وی نم'اد

بدهیم:Printعنوان آرگومان به را به Pبعد

Page 15: LISP ( Lis t P rocessing) Programming language

س'اخته ایم ک'ه ی'ک لیس'ت را ب'ه Lengthفرض کنی'د ت'ابعی ب'ه ن'ام

عن'وان آرگوم'ان می گ'یرد و ط'ول آن را ب'ر می گردان'د. بیایی'د آن را

( امتح'ان ک'نیم؛ ب'ه نظ'ر ش'ما نتیج'ه چ'ه خواه'د 4 3 2 1روی لیس'ت )

شد؟

( اج'را ش'ود، لیس'ت بای'د مق'دار 4 3 2 1) قب'ل از آنک'ه ت'ابع روی

اعم'ال کن'د و 4و3و2 را روی 1 س'عی می کن'د Lispی'ابی ش'ود.

مواجه می شویم. خطاچون چنین تابعی نداریم با

راه حل:

ت'ابعی داش'ته باش'یم ک'ه تع'دادی آرگوم'ان بگ'یرد و ب'ه عن'وان مق'دار

آرگومانهای خود را بر گرداند.لیستی از

LISPبرنامه های

Page 16: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

آنگاه تابع Length:را به صورت زیر می توان به کار برد

: راه حل ساده تر

قب'ل Lispاگ'ر در ه'ر دو مث'ال ف'وق می توانس'تیم ک'اری ک'نیم ک'ه

روی آرگومانه'ایش، آن را مق'داریابی نکن'د آنگ'اه ب'ا از اعم'ال ت'ابع

مواجه نمی شدیم.خطا

( در ابت'دای Single quote )‘ ب'ا ق'رار دادن ی'ک Lispاین ک'ار در

ب'ه عب'ارت و ش'ود می را Interpreterانج'ام آن گوی'د می

مقداریابی نکند.

Page 17: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

مثال :

( محاس'به ش'ده اس'ت و حاص'ل ک'ل عب'ارت 2 1) + در مث'ال اول

م'انع مق'داریابی می ‘ می ش'ود. ولی در مث'ال دوم عالمت 3براب'ر

ش'ود و خ'ود لیس'ت بازگردان'ده می ش'ود. پس دو مث'ال قبلی بای'د ب'ه

صورت زیر تغییر یابند :

با همین Listدر لیسپ واقعا تابعی با نام

کارائی وجود دارد.

Page 18: LISP ( Lis t P rocessing) Programming language

توابع اولیه

کلی'دی Lispنام کلم'ات از List Processing از و ش'ده گرفت'ه

همینج'ا می ت'وان ب'ه اهمیت ک'ار ب'ر روی لیس'ت ه'ا پی ب'رد. در لیس'پ

تع'دادی تواب'ع اولی'ه ب'رای ک'ار ب'ر روی رش'ته ه'ا وج'ود دارد ک'ه در زی'ر

با برخی از آنها آشنا می شویم :

CAR

این ت'ابع ی'ک آرگوم'ان از لیس'ت می گ'یرد و اولین عض'و آن را ب'ر می

گرداند:

Page 19: LISP ( Lis t P rocessing) Programming language

توابع اولیه

CDR

این ت'ابع ی'ک آرگوم'ان از ن'وع لیس'ت می گ'یرد و ی'ک لیس'ت ش'امل

لیست باز می گرداند.اعضای دوم به بعد

نامه'ای ک'ه کنی'د و CARتوج'ه CDR اولی'ه س'اختار ب'ه مرب'وط

باش'ند و ممکن اس'ت درنس'خه ه'ای جدی'د و FIRSTلیس'پ می

REST و یا HEAD و TAIL.شده باشند

Page 20: LISP ( Lis t P rocessing) Programming language

توابع اولیه

CONS

را ب'ه عن'وان آرگوم'ان می List و ی'ک S-Expressionاین ت'ابع ی'ک

ب'از می گردان'د ک'ه عض'و ی'ک لیس'ت -S آن هم'ان اولگ'یرد و

Expression اعضای آن همان اعضای لیست است. بقیه و

)CONS X L ( یک لیست است کهCAR آن Xو CDR آن

Lاست

Page 21: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

:به مثالهای زیر توجه کنید

در مث'ال آخ'ر چ'ونNil ی'ک Symbol اس'ت و جل'و آن Quote هم

ت'ابع و محاس'به ش'ود آن مق'دار اول بای'د پس نش'ده، گذاش'ته

CONS ،مق8دار آن ب8ا ولی روی مق'دار منتس'ب اعم'ال ش'ود

!!! مثال باالیی اش یکی است

استNil خود نماد Nilدر لیسپ مقدار منتسب به نماد

Page 22: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

به ط'ور کلی می ت'وان گفت ک'ه پی'اده س'ازیLisp براس'اس

Lispمی باش'د. داده ه'ا و رکورده'ا را در لیس'تهای پیون'دی

می توان بصورت زیر نگهداری کرد.

:در مثال زیر تعدادی رکورد در یک لیست ذخیره شده اند

ی'ک ب'ه لیس'ت اگ'ر Symbol ن'ام ب'ه L ن'ام ش'ود، منتس'ب

خانوادگی رکورد دوم برابر ::راه ساده تری نیز برای نوشتن عبارت فوق وجود دارد

س'اختاری ک'ه در ب'اًال مش'اهده می کنی'د همانن'د ی'ک Macro قب'ل

( در )))) CDR )CDR )CAR )CDR L( CARاز تفس'یر ب'ه ف'رم )

می آید.

Page 23: LISP ( Lis t P rocessing) Programming language

هاPredicateمقادیر منطقی و

از کاربرده'ای دیگ'ر نادرس'ت Nilیکی دیگ'ر بی'ان مق'ادیر جهت

می باشد.

ب'ه منتس'ب خ'ود Nilمق'دار Nil ب'ه عب'ارات در و باش'د می

Quote.نیازی نداریم

در دادن مق'دار درس'ت نش'ان نم'اد Lispبرای از T به'ره می

بریم.

برای مث'ال ت'ابعATOM در List زی'ر را در نظ'ر بگیری'د؛ این ت'ابع

پای'ه تواب'ع و Lispج'زء گ'یرد می آرگوم'ان ی'ک ک'ه باش'د می

آن باز می گرداند.مقداری منطقی جهت اتم بودن

Page 24: LISP ( Lis t P rocessing) Programming language

هاPredicateمقادیر منطقی و

اس'ت مق'دار منطقی به ت'وابعی ک'ه مق'دار برگش'تی از آنه'ا ی'ک

Predicate.گوییم

EQ

این ت'ابع دو آرگوم'ان می گ'یرد و می گوی'د ک'ه آی'ا این دو آرگوم'ان

!مربوط به یک خانه حافظه اند یا خیر

اگ'ر دوSymbol مس'اوی باش'ند در ی'ک آدرس حافظ'ه ق'رار می

Atom Tableه'ا را در ج'ایی ب'ه ن'ام Symbolگیرن'د؛ لیس'پ این

نگه'داری می کن'د. این ت'ابع در م'ورد اتم ه'ا همانن'د ت'ابع بررس'ی

عمل می کند، ببینید:تساوی

Page 25: LISP ( Lis t P rocessing) Programming language

دستورات کنترلی

:قبال بررسی کردیم که

محاسبه عبارات بوسیله Lispجریان کنترلی در

صورت می پذیرد

زب'ان از مث'ال ی'ک اگ'ر Cبا ک'ه بی'نیم می و ک'نیم می ش'روع

دس'تورات ش'رطی و حلق'ه هم نداش'ته باش'یم ب'از هم می ت'وانیم

پیاده سازی نماییم:

در لیسپ بصورت احضار توابع و اجرای هر تابع روی محاسبه

آرگومانهای خودش است

Page 26: LISP ( Lis t P rocessing) Programming language

دستورات شرطی

عملی'ات ش'رطی در لیس'پ بوس'یله ت'ابعCOND .انج'ام می ش'ود

آرگومانهای این تابع شامل تعداد زیادی لیست دو عضوی است:

عض'و اول ه'ر عب'ارت ی'ک لیس'ت منطقی اس'ت ک'ه می توان'د

درس'ت ی'ا غل'ط باشد.عض'و دوم ه'ر لیس'ت ی'ک عب'ارت اس'ت

ت'ابع ک'ل عن'وان ب'ه اس'ت ممکن آن حاص'ل CONDک'ه

بازگردانده شود.

Lisp اگ'ر کن'د. امتح'ان می ت'رتیب ب'ه را دوت'ایی لیس'تهای

عض'و اول ص'حیح ب'ود عض'و دوم را ب'ه عن'وان ج'واب ب'از می

گرداند وگرنه به سراغ عضو بعدی می رود.

قبل از اجرا شدن آرگومانهای خود را محاسبه و CONDتابع

مقدار یابی نمی کند.

Page 27: LISP ( Lis t P rocessing) Programming language

دستورات شرطی

در مثال زیر فرض کنید مقدار منتسب بهC، X:باشد

در مث'ال ف'وق چ'ون عب'ارت(eq x ‘c ص'حیح ب'وده اس'ت، مق'دار )

cc ت'ابع فراخ'انی حاص'ل عن'وان ب'ه ’COND ش'ده برگردان'ده

است.

ه'ای برنام'ه ت'ابع Lispدراک'ثر در COND ب'ه را آخ'ر دس'تور

چرا؟( نیز می نویسند؛ T expصورت )

Page 28: LISP ( Lis t P rocessing) Programming language

OR و ANDتوابع

این تواب'ع تع'داد دلخ'واهی آرگوم'ان می گیرن'د وAND ی'ا OR

آنها را بر می گردانند.

ب'ا تواب'ع معم'ولی در این اس'ت ک'ه آنه'ا ابت'دا تم'امی تف'اوت

( بلک'ه COND)مث'ل آرگومانه'ای خ'ود را مق'دار ی'ابی نمی کنن'د

محاس'به می کنن'د ت'ا ج'ایی راس'ت ب'ه چپ آنه'ا را ب'ه ت'رتیب از

حاص'ل ی'ا ANDک'ه OR دیگ'ر آن از بع'د و ش'ود معل'وم

آرگومان های بعدی را محاسبه نمی کنند.

Page 29: LISP ( Lis t P rocessing) Programming language

LISPتعریف توابع در

با مط'البی ک'ه ت'ا کن'ون در م'ورد لیس'پ آموخ'تیم ح'تی برنام'ه ه'ای

انتس'ابس'اده هم نمی ت'وان نوش'ت، چ'ون ح'داقل ب'ه دس'تورات

نیاز داریم.حلقهو

چگون'ه می ت'وانیم Iteration )را در لیس'پ پی'اده )تک8رار

سازی نماییم؟

.یک برنامه لیسپ با تعریف توابع ساخته می شود

نی'از باش'د تک'رارو اگ'ر در برنام'ه ب'ه حلق'ه وج'ود ن'دارد در لیس'پ

استفاده می شود.Recursionاز

در ی'ک ت'ابع می ت'وان دنبال'ه ای از دس'تورات را نوش'ت و ح'تی

درون یک تابع توابع جدید نیز تعریف نمود.

Page 30: LISP ( Lis t P rocessing) Programming language

(Lambda )دستور

ب'ر می گردان'داین دس'تور را ت'ابع ی'ک ب'رای ب'ه عن'وان مق'دار .

مث'ال ف'رض کنی'د ت'ابعی داریم ک'ه دو ع'دد را می گ'یرد و مجم'وع

آنها را باز می گرداند: آرگوم'ان دومLambda لیس'تی از آرگومانه'ای ت'ابع م'ورد نظ'ر

اس'ت و آرگوم'ان بع'دی هم مق'دار بازگش'تی ت'ابع را ب'ا توج'ه ب'ه

تعریف تابع نیست، بلکه حاصل آن یک تابع Lambdaآرگومانها نشان می دهد.

!!!است

ت'ابع مث'ال این روی x y( )+ x y( 2 3( Lambda))در )

ب'ه عن'وان حاص'ل ک'ل عب'ارات 5 اعم'ال ش'ده و 3و 2آرگومانه'ای

برگردانده می شود.

Page 31: LISP ( Lis t P rocessing) Programming language

Defineدستور

همیش'ه م'ا می خ'واهیم ت'ابع را ی'ک ب'ار تعری'ف ک'نیم و ب'ه دفع'ات

ت'ابع ی'ک ک'ه اس'ت ک'افی ک'ار این ب'رای ک'نیم. اس'تفاده آن از

ی'ک Lambda)حاص'ل ب'ه را )Symbol .دهیم می انتس'اب

استفاده می کنیم:Defineبرای این کار از !!! فراموش نشود

عالمتQuote قبل از آرگومان Defineبسیار مهم است

بوسیلهDefine.می توان چند تابع تعریف کرد

Page 32: LISP ( Lis t P rocessing) Programming language

دو ت'ابعPLS و MNS ب'ه ت'رتیب مجم'وع و تفاض'ل دو ع'دد را ب'ر

می گردانند:

MNS و PLSتوابع

عن'وان ب'ه ک'ه مق'دارهایی زنیم می ص'دا را ت'ابع ی'ک وق'تی

آرگوم'ان ب'ه ت'ابع داده می ش'وند در حقیقت ب'ه آرگومانه'ایی ک'ه

در تعریف تابع وجود دارند منتسب می شود.

Page 33: LISP ( Lis t P rocessing) Programming language

LISPتعریف توابع در

یک دس'تور دیگ'ر ب'رای تعری'ف تواب'ع ک'ه در اک'ثر نس'خه ه'ا می

( اس'ت ک'ه ب'ه )Define Function(Defun)توانی'د اس'تفاده کنی'د

صورت زیر استفاده می شود:

برای مث'ال ت'ابعی را تعری'ف می ک'نیم ک'ه جم'ع دو ع'دد را حس'اب

کند:

با اطالع'اتی ک'ه اکن'ون درب'اره لیس'پ بدس'ت آوردیم، می ت'وانیم

اکثر توابع را در لیسپ پیاده سازی کنیم.

Page 34: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

برنامه ای بنویسید که عددn را بگیرد و n:را برگرداند !

در برنام'ه ف'وق اگ'رn<2 را ب'از می گردان'د، در 1 ب'ود، مق'دار

( را بر می گرداند .)n-1(n*Factغیر این صورت مقدار )

ت'ابع خ'ودش را ص'دا می Factهم'انطور ک'ه مش'اهده می کنی'د

زند.

Page 35: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

IF

این ت'ابع در اک'ثر نس'خه ه'ای جدی'د لیس'پ وج'ود دارد و ک'ار را

راحت می کند:این دس'تور<Condition ،را محاس'به می کن'د. اگ'ر درس'ت ب'ود <

<Exp1< را مق'داریابی می کن'د در غ'یر این ص'ورت <Exp2 را <

هم'ه آرگومانه'ای COND هم مث'ل IFب'از می گردان'د. توج'ه کنی'د ک'ه

خود را مقداریابی نمی کند.

حال تابعFact را با IF:می نویسیم

Page 36: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

برنام'ه ای بنویس'ید ک'ه ی'ک لیس'ت را ب'ه عن'وان آرگوم'ان بگ'یرد و

هستند، پس از CDR و CARتنها دستوراتی که بلد هستیم آن را بازگرداند:طول

بهره می بریمبازگشت

حال این رابطه را تبدیل به برنامه می کنیم:•

توجه کنید که اتمNil .معادل لیست خالی است

Page 37: LISP ( Lis t P rocessing) Programming language

LISPبرنامه های

ک'ه بنویس'ید ای و Lلیس'ت برنام'ه و Nع'دد بگ'یرد را N امین

Nil خ'ارج اس'ت مق'دار L از مح'دوده N را برگردان'د. اگ'ر Lعض'و

را بازگرداند:-CDR)Nامین عضو N-1 همان Lامین عضو N راهنمایی:

است)1

Page 38: LISP ( Lis t P rocessing) Programming language

Evalتابع

باش'د. مثال داده برنام'هیک داده در لیس'پ خ'ودش می توان'د ی'ک

( ی'ک لیس'ت س'ه عض'وی اس'ت ک'ه می توان'د 1 2)+ ای ب'ه ش'کل

هم در نظر گرفته شود.برنامهبصورت یک

ب'ه را آنه'ا خ'واهیم می و داریم ه'ایی داده کنی'د ف'رض حال

Interpreter لیس'پ ب'دهیم ت'ا اج'را کن'د. مث'ل اینک'ه آنه'ا را در

انج'ام می Eval نوش'ته باش'یم. این ک'ار ب'ا ت'ابع Lispخ'ط فرم'ان

پذیرد. این تابع آرگومان خود را محاسبه و مقدار یابی می کند:

‘ بر عکس کار Evalمی توان گفت کار

است

Page 39: LISP ( Lis t P rocessing) Programming language

ماکروها

در م'اکرو س'طحی Lispیک ط'ور ح'ال ب'ه در ت'ابع ی'ک ش'بیه

برنام'ه ن'یز ک'د اص'لی اس'ت و نماین'ده ی ی'ک تغی'یر ش'کل اس'تفاده

می باشد.

ب'ه برنام'ه نویس'ان ایج'اد ف'رم ه'ای نح'وی Lispماکروه'ا امک'ان

جدید در زبان را می دهد.

،تولی'د کن'د را نه'ایی اینک'ه کامپ'ایلر ک'د اص'لی از تواب'ع قب'ل این

احضار می شوند.

ماکروها هر عملگرCL .را می توانند استفاده کنند

Page 40: LISP ( Lis t P rocessing) Programming language

کاربردها

،اس'تاندارد از کمیت'ه ی ب'زرگ انتظ'ارات ب'ا وج'ود Common Lisp ی'ک زب'ان برنام'ه نویس'ی مناس'ب ب'اقی مان'د، ک'ه اغلب در

ه8وش دانش'گاه و ی'ا محی'ط ه'ای ک'اربردی وی'ژه ک'ه در ارتب'اط ب'ا است به کار می رود. مصنوعی

بس'یاری از ک'اربرانCommon Lisp ب'رای مع'رفی زب'ان مطل'وب CL را می زنن'د ک'ه ب'ا yahooش'ان مث'ال آش'نای س'ایت بازرگ'انی

گس'ترش یافت'ه اس'ت. درض'من کاربرده'ای ک'د منب'ع ب'از م'وفقی ب'ه یک ثابت کننده نظریه: acl2 وجود دارد مثل: Common Lispزبان

Maxima : .یک سیستم جبری کامپیوتری خبرهCompo : ب'ه س'اختارهای موس'یقی اج'ازه توص'یف روش

طبیعی را می دهد. Lisa : ه'ای نماین'ده ب'رای س'اختن ق'انون تولی'د سیس'تم

نرم افزاری "هوش"

Page 41: LISP ( Lis t P rocessing) Programming language

کاربردها

.به عنوان یک زبان تابعی پردازش لیست طراحی شد

.برای کارهای جستجو بسیار مناسب است

.بازیهای کامپیوتری در آن به خوبی پیاده سازی می شوند

.پردازش متن در آن به خوبی انجام می شود

تفسیر ماشین خودکار که در آن رشته هایی از نمادها می تواند

توسط رشته های دیگری جایگزین شود زمینه دیگری از کاربرد

این نرم افزار می باشد.

Page 42: LISP ( Lis t P rocessing) Programming language

منابع

آموزشlisp – علی زرگر – goldsmith.ir

Paul Graham.1996. ANSI Common Lisp

Programming Languages Structures (Organick,

Forsythe, Plummer) Academic Press 1978

Artificial Intelligence (Luger) 2002

42

Page 43: LISP ( Lis t P rocessing) Programming language

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