1 / 32

LISP

LISP. کیوان شفیعی. Lisp,1960. نگاهی به تاریخچه ی Lisp : ایده کلی: برخی از ایده های قدیمی ، قدیمی به نظر می رسند. برخی از ایده های قدیمی ، جدید به نظر می رسند. مثالی از یک زبان خوش ساخت و کار راه انداز متفاوت از C ، C++ و JAVA : شانسی برای متفاوت فکر کردن

lamont
Download Presentation

LISP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LISP کیوان شفیعی

  2. Lisp,1960 • نگاهی به تاریخچه ی Lisp: • ایده کلی: • برخی از ایده های قدیمی ، قدیمی به نظر می رسند. • برخی از ایده های قدیمی ، جدید به نظر می رسند. • مثالی از یک زبان خوش ساخت و کار راه انداز • متفاوت از C ، C++ و JAVA : شانسی برای متفاوت فکر کردن • موضوعات کلی در رابطه با طراحی زبان را شرح می دهد.

  3. John McCarthy • پیشگام در AI • فرموله کردن استدلال ها • همچنین • پیشنهاد اشتراک زمانی • تئوری های ریاضی • Lisp از علاقه به محاسبات سمبلیک سرچشمه گرفت (ریاضی ، منطق)

  4. خلاصه ای از Lisp • دارای لهجه های متفاوتی است: • Lisp 1.5, Maclisp, …, Scheme, ... • CommonLisp دارای ویژگیهای اضافی است • در این درس مختصری از Lisp 1.5 توضیح داده خواهد شد. • دارای نحو ساده ای است (+ 1 2 3) (+ (* 2 3) (* 4 5)) (f x y)

  5. Atom ها و Pair ها • Atom ها شامل اعداد و رشته های غیر قابل تقسیم است. <atom> ::= <smbl> | <number> <smbl> ::= <char> | <smbl><char> |<smbl><digit> <num> ::= <digit> | <num><digit> • جفتهای دارای نقطه (dotted pairs) • برای pair از (A . B) استفاده می شود. • به عبارتهای سمبلیک، S-expressionsمی گویند: <sexp> ::= <atom> | (<sexp> . <sexp>)

  6. توابع پایه • توابعی که روی اتمها و pair ها عمل می کنند: cons car cdreq atom • اعلانها و کنترل: cond lambda define eval quote یا‘ • مثال: (lambda (x) (cond ((atom x) x) (T (cons ‘A x)))) function f(x) = if atom(x) then x else cons(“A”,x) • توابعی با اثرات جانبی (Side Effect) rplacarplacd

  7. ارزیابی عبارت ها • لیسپ از حلقه Read-eval-print استفاده می کند • فراخوانی تابع (function arg1 ... argn) • هر یک از آرگومانها ارزیابی می شوند • لیستی از مقادیر آرگومانها به تابع داده می شود • در بعضی از فراخوانی ها تمام آرگومانها ارزیابی نمی شوند • مثال (cond (p1 e1) ... (pn en) ) • از چپ به راست پیش می رود • اولین pi با مقدار درست یافته می شود، ei مربوط به آن ارزیابی می شود • مثال: در (quote A) ، A ارزیابی نمی شود

  8. مثالها (+ 4 5) expression with value 9 (+ (+ 1 2) (+ 4 5)) evaluate 1+2, then 4+5, then 3+9 to get value (cons (quote A) (quote B)) pair of atoms A and B (quote (+ 1 2)) evaluates to list (+ 1 2) '(+ 1 2) same as (quote (+ 1 2))

  9. مقاله ی McCarthy در سال 1960 • مقاله ای قابل توجه بخاطر: • ایده های خوب برای زبانها • شرح وضعیت برنامه نویسی در 1960 • بینش خوبی در پروسه ی طراحی زبان ارائه می داد. • مفاهیم مهم: • علاقه به محاسبات سمبلیک طراحی را تحت تأثیر قرار داده بود. • از مدل ماشین ساده ای استفاده شده بود • به مسایل تئوری توجه شده بود تئوری تابع بازگشتی ، محاسبات لامبدا • ایده های خوب: برنامه ها به عنوان داده، زباله روبی

  10. طراحی یک زبان خوب • کاربرد انگیزه دهنده • ماشین انتزاعی (Abstract machine) • بنیاد تئوری

  11. کاربرد انگیزه دهنده • کاربردهای انگیزه دهنده قسمتی از طراحی زبان خوب است و در طراحی زبان به صورتهای زیر تأثیر می گذارد: • تمرکز روی مهمترین اهداف • حذف ایده های جذاب ولی غیر ضروری Lisp محاسبات سمبلیک ، منطقی ، برنامه نویسی اکتشافی C سیستم عامل یونیکس Simula شبیه سازی PL/1 سعی در حل تمام مسائل برنامه نویسی ؛ موفق نبود

  12. مدل اجرا (ماشین انتزاعی) • معنای زبان باید تعریف شده باشد • خیلی واقعی • برنامه ها قابل حمل نیستند ، وابسته به معماری خاص • مانع بهینه سازی • خیلی انتزاعی • به آسانی زمان و فضای اجرا قابل محاسبه نیست • لیسپ: IBM 704، ایده های خاص • ثباتهای آدرس و کاهشی -> سلولهایی با دو بخش • زباله روبی(Garbage Collection) دیدی انتزاعی از حافظه ارائه می دهد

  13. ماشین انتزاعی • مفاهیم ماشین انتزاعی: • کامپیوتر ایده آل، برنامه ها را مستقیماً اجرا می کنند • برنامه نویس تصویر ذهنی از اجرا دارد • نباید خیلی واقعی ، یا خیلی انتزاعی باشد • مثال: • فرترن • ماشین با ثباتهای تخت، چیدمان حافظه مثل آرایه ی خطی • بدون بازگشت پذیری، بدون پشته • خانواده الگول • ماشین پشته ای، رکورد فعالیت، ذخیره سازی در توده (heap) • اسمالتاک • اشیا ، برقراری ارتباط با پیغام

  14. بررسی تئوری • توضیح McCarthy از لیسپ • ” ... طرحی برای نمایش توابع نیمه بازگشتی از کلاس خاصی از عبارتهای سمبولیک“ • لیسپ از موارد زیر استفاده می کند: • مفهوم توابع (نیمه بازگشتی) قابل محاسبه • می خواهد تمام توابع قابل محاسبه را بیان کند • عبارتهای تابعی: • از محاسبات لامبدا استفاده می کند • محاسبات لامبدا با ماشین تورینگ یکسان است، ولی از نحو و قوانین محاسباتی مفیدی استفاده می کند

  15. نوآوری ها در طراحی لیسپ • عبارت گرا • عبارتهای تابعی • عبارتهای شرطی • توابع بازگشتی • دید انتزاعی از حافظه • سلول ها بجای آرایه ای از مکانهای شماره دار • زباله روبی • برنامه ها مثل داده ها هستند • توابع مرتبه ی بالاتر

  16. اقسام کلمه در زبانهای برنامه نویسی • دستور (statement) MOV AX,12 • فرمانهای دستوری • مقدار قبلی حافظه تغییر می کند. • عبارت (expression) (x+5)/2 • موجودیت نحوی که ارزیابی می شود • دارای مقدار است، نیاز به تغییر حافظه ندارد • اگر انجام شود، دارای اثرات جانبی (side effect) است • اعلان (declaration) integer x • شناسه ی جدیدی معرفی می کند • ممکن است مقداری به شناسه اختصاص دهد یا نوع را مشخص نماید و غیره

  17. عبارتهای تابعی • شکل (lambda ( parameters ) ( function_body ) ) • نحو مورد استفاده بر اساس محاسبات لامبدا است f. x. f (f x) (lambda (f) (lambda (x) (f (f x)))) • می توان بدین گونه تابعی بدون نام تعریف کرد ( (lambda (f) (lambda (x) (f (f x)))) (lambda (x) (+ 1 x))) )

  18. مثال (define twice (lambda (f) (lambda (x) (f (f x)))) ) (define inc (lambda (x) (+ 1 x))) ((twice inc) 2)  4

  19. عبارتهای شرطی در لیسپ • تعمیم یافته ی if-then-else (cond (p1 e1) (p2 e2) … (pn en) ) • شرطهای p1 … pn از چپ به راست ارزیابی می شوند • اگر شرط pi اولین شرط درست باشد ، ei ارزیابی می شود • مقدارei، مقدار عبارت است به نظر می رسد لیسپ اولین زبانی بوده که عبارتهای شرطی را معرفی کرده است

  20. مثال (cond ((< 2 1) 2) ((< 1 2) 1)) has value 1 (cond ((< 2 1 ) 2) ((< 3 2) 3)) has no value (cond (diverge 1) (true 0)) no value, if expression diverge loops forever (cond (true 0) (diverge 1)) has value 0

  21. صریح بودن (Strictness) • یک عملگر یا عبارت صریح است اگر تمام عملوندها یا عبارتهای تشکیل دهنده ی آن دارای مقدار باشند • در لیسپ cond صریح نیست ، اما جمع صریح است • (cond (true 1) (diverge 0)) • (+ e1 e2) توضیح: (define loop (lambda (x) (loop x))) diverge  (loop ())

  22. Address Atom Atom Atom Decrement A B C 0 مدل حافظه در لیسپ • سلولهای cons • اتمها و لیستها با سلولها نمایش داده می شوند ‘(A B C)

  23. دستورات روی سلولها • Atom • اگر آرگومان اتم باشد true را برمی گرداند در غیر این صورت false • Eq • بررسی اینکه آرگومانها در یک مکان ذخیره شده یانه؟ • (cons x y): • سلول جدید c ایجاد می شود • قسمت آدرس c به x اشاره می کند • قسمت کاهشی به y اشاره می کند • اشاره گر به c برگشت داده می شود • (car x): محتوای قسمت آدرس X را برمی گرداند • (cdr x): محتوای قسمت کاهشی X را برمی گرداند c x y

  24. A A A B B B اشتراک (a) (b) • هر دو ساختمان می توانند به صورت ((A .B) (A.B)) • کدام یک حاصل از ارزیابی عبارات زیر است؟ • (cons (cons 'A 'B) (cons 'A 'B)) • ((lambda (x) (cons x x))(cons 'A 'B))

  25. زباله روبی (Garbage Collection) • زباله: در نقطه ای از اجرای برنامه ای مثل P ، مکانی از حافظه مثل m زباله است اگر هیچ اجرای کاملی از P از آن نقطه نتواند به مکان m دسترسی داشته باشد. • زباله روبی : • تشخیص زباله در حین اجرای برنامه • GC زمانی در خواست می شود که حافظه ی بیشتری مورد نیاز است • تصمیم گیری توسط سیستم زمان اجرا(run-time) انجام می شود و نه برنامه

  26. مثال (car (cons ( e1) ( e2 ) )) سلولهایی که در موقع ارزیابی e2 ایجاد می شوند زباله هستند، مگر اینکه باe1 یا قسمتهای دیگر برنامه اشتراک داشته باشد

  27. الگوریتم نشانه گذاری و جارو کردن (mark – and – sweep) • فرض می شود همراه هر داده ای یک بیت برچسب (tag) قرار دارد • الگوریتم: • تمام tag ها صفر می شوند • از هر مکانی که در برنامه استفاده شده شروع کرده ، تمام لینکهای آن دنبال شده و tag تمام سلولهایی که ملاقات می شوند 1 می شوند • تمام سلولهایی که tag آنها صفر است در لیست آزاد قرار می گیرند

  28. برنامه به عنوان داده • برنامه ها و داده ها دارای نمایش یکسانی هستند • تابع eval برای ارزیابی محتوای لیست استفاده می شود • مثال: جانشین سازی x با y در z و ارزیابی آن: (define substitute (lambda (x y z) (cond ((null z) z) ((atom z) (cond ((eq z y) x ) (true z))) (true (cons (substitute x y (car z)) (substitute x y (cdr z))))))) (define substitute-and-eval (lambda (x y z) (eval (substitute x y z)))) (substitute-and-eval '3 'x '(+ x 1))

  29. توابع بازگشتی • می خواهیم تابع زیر را بنویسیم f(x)=0 if x=0 else x+f(x-1) • حل: (lambda (x) (cond ((eq x 0) 0) (true (+ x (f (- x 1)))))) اما f دربدنه ی تابع قبلاً تعریف نشده • راه حل McCarthy در سال 1960: (label f (lambda (x) (cond ((eq x 0) 0) (true (+ x (f (- x 1 ))))))) • تعریف بازگشتی • (define f (lambda (x) (cond ((eq x 0) 0) (true (+ x (f (- x 1 )))))))

  30. توابع مرتبه ی بالاتر • تابعی که • یک تابع به عنوان آرگومان می گیرد • یا تابعی را به عنوان نتیجه بر می گرداند • یا هر دو • مثال: ترکیب توابع (define compose (lambda (f g) (lambda (x) (f (g x))))) • مثال: maplist (define maplist (lambda (f x) (cond ((null x) ()) (true (cons (f (car x)) (maplist f(cdr x ) ))))))

  31. مثال (define inc (lambda (x) (+ x 1))) (maplist inc '(1 2 3)) • (2 3 4) مدخل scheme: (define true #t) (define false #f) (define eq eq?) (define null null?)

  32. Q ?

More Related