zabane_barnameh_nevisi_lisp

در نمایش آنلاین پاورپوینت، ممکن است بعضی علائم، اعداد و حتی فونت‌ها به خوبی نمایش داده نشود. این مشکل در فایل اصلی پاورپوینت وجود ندارد.






  • جزئیات
  • امتیاز و نظرات
  • متن پاورپوینت

امتیاز

درحال ارسال
امتیاز کاربر [0 رای]

نقد و بررسی ها

هیچ نظری برای این پاورپوینت نوشته نشده است.

اولین کسی باشید که نظری می نویسد “زبان برنامه نویسی”

زبان برنامه نویسی

اسلاید 1: بسم الله الرحمن الرحیم

اسلاید 2: اموزش زبان برنامه نویسی lisp

اسلاید 3: مقدمه

اسلاید 4: جان مک کارتی و دانشجویانش اولین بار در سال 1958 براي پیاده سازي لیسپ شروع به کار کردند.بعد از زبان فرترن زبان لیسپ یکی از قدیمی ترین زبانهاست که هنوز هم در حال استفاده است آنچه بیشتر قابل توجه است این است که هنوز جلودار تکنولوژي زبان هاي برنامه سازي می باشد.برنامه نویسانی که با زبان لیسپ آشنا هستند به شما خواهند گفت که این زبان به صورت مجزا ایجاد شده است.چیزي که زبان لیسپ را متمایز و مشخص می کند این است که براي رشد و تکامل طراحی شده است. شما می توانید از لیسپ براي تعیین اپراتورهاي جدید لیسپ استفاده کنید.

اسلاید 5: تکنیک هاي جدید

اسلاید 6: زبان لیسپ از توابع و ماکروها ، همانند برنامه هاي ما ساخته شده است.بنابراین مشکلی براي توسعه زبان لیسپ براي نوشتن برنامه هاي ما وجود ندارد. به این روش برنامه نویسی پایین- بالا( down - top ) گفته می شود. یک برنامه پایین – بالا میتواند به عنوان یک سري از لایه ها نوشته شود که هر لایه وظیفه مرتب سازي زبان برنامه سازي لایه ي بالایی را دارد. کلا این زبان بصورت لایه اي کار می کند و شما می توانید بر روي لایه هاي قبلی لایه اي جدید بسازید.

اسلاید 7: فرم ( Form )

اسلاید 8: هر سیتم لیسپ شامل یک روش محاوره ي جلو – عقب ( front-end )خواهد بود که به آن سطح بالا گفته می شود.یعنی شما عبارات را در سطح بالا وارد می کنید و سیتم مقدار آنها را نشان می لیسپ معمولا پرامپتی را نشان می دهد که به شما می گوید منتظر وارد شدن عبارات می باشد. اکثر پیاده سازي هاي زبان لیسپ از < براي نشان دادن پرامپت سطح بالا استفاده می کنند.

اسلاید 9: یک نمونه ي ساده از عبارت لیسپ که یک مقدار عدد صحیح است در زیر نشان داده شده است اگر ما در پرامپت مقدار 1 را وارد کنیم:> 11>سیستم مقدار آن را چاپ خواهد کرد و در ادامه نمایش پرامپت بیانگر آماده بودن براي ورود عبارات دیگر است.

اسلاید 10: در زندگی روزمره ما عمل جمع را به صورت 2+3 نشان می دهیم اما در لیسپ اپراتور + ابتدا و آرگومانها بعد از آن می آیند. تمام عبارات در یک جفت پرانتز قرار می گیرند.به این روش نشانه گذاريprefix گفته می شود ,در حقیقت این نوع نشانه گذاري یکی از بهترین قابلیت هاي زبان لیسپ است.

اسلاید 11: در لیسپ فقط آرگومانها را با یکدیگر جمع می کنیم:(+ 2 3 4)در روش متداول استفاده از + فقط براي دو آرگومان استفاده می شود یکی سمت چپ و یکی سمت راست. نشانه گذاري prefix انعطاف پذیر است یعنی در لیسپ به اپراتور + می توان هر تعداد آرگومان داد.> (+)0> (+ 2)2> (+ 2 3)5> (+ 2 3 4)9> (+ 2 3 4 5)14

اسلاید 12: ارزیابی (Evaluation)

اسلاید 13: در قسمت قبل ما عبارات را در سطح بالا وارد کردیم و لیسپ مقدار آنها را نشان داد.در لیسپ + یک تابع است و عباراتی مانند (32+) یک فراخوانی تابع است. زمانی که لیسپ یک فراخوانی تابع را ارزیابی می کند این کار در دو مرحله انجام می شود:ابتدا آرگومانها از چپ به راست ارزیابی می شوند . در این مورد آرگومانها به مقدار خود ارزیابی می شوند.یعنی مقدار آرگومانها به ترتیب 3 و 2 است.مقادیر آرگومانها ، از تابع که به آن اپراتور گفته می شود عبورمی کنند و مقدار انها برگردانیده میشود . در مثال بالا تابع + مقدار 5 را بر می گرداند.

اسلاید 14: بنابراین زمانی که (/ (- 7 1) (- 4 2)) ارزیابی شد ، اتفاقاتی که رخ می دهد شامل:(-71) را ارزیابی می کند: 7 به 7 ارزیابی شده و 1 به 1 ارزیابی می شود. این مقادیر بعد از عبوراز تابع – مقدار 6 را برمی گرداند.(-42) را ارزیابی می کند: 4 به 4 ارزیابی شده و 2 به 2 ارزیابی می شود.این مقادیر بعد از عبور ازتابع – مقدار 2 را بر می گرداند.مقدار 6 و 2 به تابع / فرستاده شده و مقدار 3 برگردانده می شود.به این روش قانون ارزیابی درcommon lisp گفته می شود.

اسلاید 15: تمام اپراتور ها در زبان لیسپ تابع نیستند ولی اکثر آنها تابع می باشند.اپراتوري که از قانون ارزیابی لیسپ پیروي نمی کند quote می باشد. اپراتورquote یک اپراتور ویژه است یعنی یک قانون ارزیابی متمایزي از آن خود دارد و آن قانون : انجام هیچ چیز است.

اسلاید 16: در مثال زیر اپراتور یک آرگومان گرفته و آن را کلمه به کلمه برمی گرداند.> (quote (+ 3 5))(+3 5)براي راحتی لیسپ را به عنوان مخففquote تعریف کرده ، شما می توانید با قرار دادي جلوي هر عبارت quote را فراخوانی کنید. > (+ 3 5)(+ 3 5)استفاده از علامت اختصاري بجاي نوشتن عبارت quote بیشتر رایج است.لیسپ quote را به عنوان راهی براي حفاظت عبارات از ارزیابی فراهم کرده است.

اسلاید 17: داده ها ( Datas )

اسلاید 18: یک نوع داده اي دیگر در لیسپ همانند دیگر زبانها وجود دارد string می باشد که یکسري از کاراکتر ها را همراه با double-quotes نشان داده می شود مانند “helloدو نوع داده اي لیسپ که ما نمی توانیم در دیگر زبانها پیدا کنیم سمبول ها و لیست ها هستند. سمبول ها کلمات هستند.ArtichokeARTICHOKEصرف نظر از اینکه شما چگونه آنها را تایپ می کنید معمولا آنها به حروف بزرگ تبدیل می شوند.سمبول ها معمولا به مقدار خود ارزیابی نمی شوند بنابراین اگر شما بخواهید از یک سمبول استفاده کنید باید قبل از آن از quote استفاده کنید.

اسلاید 19: لیست ها نشان دهنده ي هیچ و یا تعداد زیادي عنصر در میان پرانتز ها هستند. عنصر ها می توانند از هر نوعی از جمله لیست ها باشند.> (my 3 Sons)(MY 3 Sons)> (the list (a b c) has 3 elements)(THE LIST (A B C) HAS 3 ELEMENTS) شما می توانید با فراخوانی list لیستهایی را ایجاد کنید. از آنجایی که لیست یک تابع می باشد آرگومانهاي آن ارزیابی می شوند. در اینجا ما فراخوانی + را داخل فراخوانی به یک لیست می بینیم> (list my (+ 2 1) Sons) (MY 3 Sons)

اسلاید 20: اگر قبل از لیستquote آمده باشد ارزیابی کننده خود لیست را برمی گرداند ، اما اگروجود نداشته باشد ازریابی کننده مقدار لیست را برمی گرداند.> (list (+ 2 1) (+ 2 1))((+ 2 1) 3)در اینجا اولین آرگومان دارايquoteاست و بنابراین خروجی یک لیست است. آرگومان دوم quote ندارد وبعد از فراخوانی تابع یک عدد بر گردانده می شود.

اسلاید 21: دو راه براي نشان دادن لیست هاي خالی وجود دارد : شما می توانید بوسیله یک جفت پرانتز که چیزي بین آنها نیست یک لیست خالی را نمایش دهید .یا شما می توانید از سمبولnil استفاده کنید.> ( )NIL

اسلاید 22: ( List Operations ) اپراتورهاي لیست

اسلاید 23: ساخت یک لیست توسط تابع :cons گر آرگومان دوم یک لیست باشد ، این تابع یک لیست جدید که از اضافه کردن آرگومان اول به بقیه عناصر ایجاد می کند.> (cons a (b c d))(A B C D)ما می توانیم لیست هایی توسط عناصر جدید consبرروي یک لیست خالی بسازیم.> (cons a (cons ‘b nil))(A B)> (listab)(A B)

اسلاید 24: توابع اولیه براي استخراج عناصر از داخل لیستها car و cdr هستند. car اولین عنصر یک لیست و cdr هر چیزي که بعد از عنصر اول باشد را بر می گرداند. > (car (a b c))A> (cdr (a b c))(B C)اگر شما بخواهید که عنصر سوم را بدست آورید می توان گفت:> (third (a b c d))C

اسلاید 25: درستی ((truth

اسلاید 26: در Common Lisp t بطور پیش فرض براي نمایش درستی بکار می رود. تابعی که مقادیر را بصورت درست یا غلط برمی گرداند Predicate نامیده می شود.Predicate هاي زبان لیسپ اغلب داراي نامهایی که آخر آنها p است می باشند. اگر آرگومان تابع listp یک لیست باشد مقدار درست برگردانده می شود.>(listp ’(a b c ))Tغلط بودن در Common Lisp ، بوسیله nil لیست خالی نشان داده می شود. اگر ما به تابع listp آرگومانی که لیست نیست تحویل بدهیم مقدار nil برگردانده می شود.> (listp 27)NILتابع null در صورتیکه لیست خالی باشد مقدار درست بر می گرداند> (null nil)T

اسلاید 27: تابع not مقدار درست برمی گرداند اگر آرگومان آن غلط باشد. > (not nil)T یک شرط ساده در لیسپ if می باشد. این معولا سه آرگومان می گیرد: عبارت testو عبارت then و عبارت else.عبارت test ارزیابی شده در صورتی که مقدار درست برگرداند عبارت then ارزیابی می شود. در صورتیکه عبارت test مقدار false برگرداند سپس عبارت else ارزیابی شده و مقدار آن برگردانده می شود.

اسلاید 28: مانند ,quote if یک اپراتور ویژه است. این اپراتور نمی تواند بصورت یک تابع اجرا شود چرا که آرگومانها در فراخوانی تابع معمولا ارزیابی می شوند ، در حالی که در if تنها یکی از دو آرگومان انتهایی ارزیابی می شوند. اگرچه t بصورت پیش فرض براي نشان دادن درستی بکار می رود ، هر چیزي به جز nil به عنوان شمارش درست در چارچوب منطقی نیز بکار می رود.

اسلاید 29: اپراتورهاي منطقی and و or به شرطی ها شباهت دارند.هر دوي آنها تعدادي آرگومان می گیرند ولی فقط تعدادي از آنها یی که مقدار برگرداند ارزیابی می شوند. اگر همه ي آرگومانها درست باشند (یعنی null نباشد) سپس and مقدار آخرین آنرا برمی گرداند.> (and t(+ 1 2))3اما اگر معلوم شود یکی از آرگومانها اشتباه است هیچ یک از آرگومانها بعد از آن ارزیابی نمی شود. به همین ترتیب براي or با وجود درست بودن یکی از آرگومانها انجام می شود.

اسلاید 30: ( Functions ) توابع

اسلاید 31: شما می توانید تابع جدیدي با defun تعریف کنید. معمولا سه و یا تعداد بیشتري آرگومان می گیرد: یک نام ، یک لیست از پارامترها و یک یا تعداد بیشتري از عبارات که بدنه ي تابع را خواهند ساخت. در اینجا توسط تابع ، بدست آوردن سومین عنصر را تعریف می کنیم:> (defun our-third (x) (car (cdr (cdr x))))OUR-THIRD

اسلاید 32: > (defun our-third (x) (car (cdr (cdr x))))OUR-THIRDاولین آرگومان می گوید که اسم این تابع our-third خواهد بود. دومین آرگومان که لیست (x) است می گوید که تابع دقیقا یک آرگومان می گیرد Xیک سمبول است که به عنوان یک نگهدارنده ي مکانی که دراینجا متغیر نامیده می شود .می باشد. زمانیکه متغیري براي نمایش یک آرگومان یک تابع بکار می رود مانند x آنرا پارامتر می نامیم.دنباله ي تعریف (car (cdr (cdr x) به عنوان بدنه ي تابع شناخته شده است. این قسمت کاري که لسیت براي محاسبه ي مقدار برگشتی تابع انجام می دهد را مشخص می کند. بنابراین فراخوانی our-third برگرداندن(car (cdr (cdr x) براي هر مقداX که به عنوان آرگومان به آن می دهیم است.

اسلاید 33: در عبارات زیر بررسی می شود که آیا جمع 1 و 4 بزرگتر از 3 است:>(> (+ 1 4) 3)Tبا جایگزین کردن این اعداد با متغیر ها ما می توانیم تابعی بنویسیم که بررسی کند جمع دو عدد بزرگتر از سومین عدد است:> (defun sum-greater (x y z)(> (+ x y) z))SUM-GREATER> (sum-greater 1 4 3)T

اسلاید 34: نکته:لیسپ هیچ فرقی بین یک برنامه ، یک زیربرنامه و یک تابع نمی داند .

اسلاید 35: ( Recursion ) بازگشتی

اسلاید 36: (defun our-member (obj lst)(if (null lst)nil(if (eql (car lst) obj)Lst(our-member obj (cdr lst)))))> (our-member ’b ’(a b c))(B C)> (our-member ’z’(a b c))NILدر تعریف our-member برابر بودن حروف بررسی می شود. براي تست اینکه هر شی obj یک عضو لیست lst می باشد:ابتدا بررسی می شود که lst خالی است. اگر آن خالی است آنگاه به وضوح معلوم است که obj یک عضو آن نمی باشد و هیچ کاري انجام نمی شود.در غیر اینصورت اگر obj عنصر اول lst باشد ,یک عضو است .در غیر اینصورت obj تنها یک عضوي از lst است اگر آن یک عضو از بقیه ي lst باشد. Eql) تساوي دو آرگومان باهم را تست می کند.(

اسلاید 37: ( Input and Output ) ورودي و خروجی

اسلاید 38: تاکنون ما ورودي و خروجی را بصورت ضمنی با بهره گیري از سطح بالا انجام دادیم این روش براي برنامه هاي محاوره اي واقعی به احتمال زیاد کافی نمی باشد.Formatعمومی ترین تابع خروجی در زبان لیسپ می باشد. این تابع دو یا تعداد بیشتري آرگومان می گیرد: اولی نشان می دهد که خروجی کجا باید چاپ شود ، دومین آرگومان نشان دهنده ي قالب رشته می باشد و آرگومانهاي باقیمانده معمولا اشیایی هستند که در جاهاي مشخص شده در داخل قالب چاپ می شوند.

اسلاید 39: > (format t ~A plus ~A equals ~A~%2 3 (+ 2 3)) 2 plus 3 equals 5 NIL tاولین آرگومان format نشان می دهد که خروجی درجاي پیش فرض فرستاده شود. آرگومان دوم یک رشته است که به عنوان یک قالب براي خروجی بکار می رود. در بین این رشته هر ~A نشان دهنده ي مکانی است که باید پر شود %~ نشان دهنده ي یک خط جدید می باشد. این مکانها توسط مقادیر آرگومانهاي باقی مانده به ترتیب پر خواهد شد.

اسلاید 40: Read تابع استاندارد براي ورودي می باشد. زمانی که هیچ آرگومانی داده نمی شود این تابع از مکان پیش فرض می خواند ، که معمولا سطح بالا می باشد. در اینجا تابعی وجود دارد که از پرامپت ، ورودي کاربر را گرفته و هر آنچه را که گرفته بر می گرداند.

اسلاید 41: (defun askem (string)(format t ~A string)(read))اجراي آن به صورت زیر می باشد:> (askem How old are you? )How old are you? 2929

اسلاید 42: ( Variables ) متغیرها

اسلاید 43: یکی از اپراتورهایی که معمولا در لسیپ استفاده می شو let است ، که به شما اجازه تعریف متغیرهاي محلی جدید را می دهد:> (let ((x 1) (y 2))(+ x y))3یک عبارت let دو بخش دارد. ابتدا لیستی از دستورالعمل ها براي ایجاد متغیرها براي هر نوع فرمی می آید. هر متغیر در ابتدا توسط عبارت نظیر خود مقدار دهی می شوند. همانطور که در مثال بالا ما دو متغیر x و y ایجاد بعد از متغیرها و مقادیر بدنه عبارت می آید که براساس قوانین ارزیابی می شوند ، که در مورد مثال قبل تنها یکی وجود دارد و آن فراخوانی + است . مقدار آخرین عبارت به عنوان مقدار let بازگردانده می شود.

اسلاید 44: (defun ask-number ()(format t Please enter a number. )(let ((val (read)))(if (numberp val)val(ask-number))))این تابع متغیري به اسم val براي نگهداشتن شی اي که توسط read برگدانده می شود ایجاد می کند. numberp یک predicate است براي تست اینکه این آرگومان یک عدد است بکار می رود. اگر مقداري که توسط کاربر وارد می شود یک عدد نباشد ask-number خود را فراخوانی می کند.

اسلاید 45: متغیرهاي محلی فقط در یک محدوده ي مشخص معتبر می باشند.نوع دیگري از متغیرها وجود دارد که متغیر سراسري نامیده می شود که می تواند در هرکجایی قابل دسترسی باشد.شما با دادن یک سمبول و یک مقدار به defparameter می توانید یک متغیر سراسري ایجاد کنید.

اسلاید 46: > (defparameter *glob* 99)چنین متغیري در هر جایی قابل دسترسی خواهد بود به جز در عباراتی که متغیر هاي محلی جدیدي با همین نام ایجاد شده باشد. براي جلوگیري از این اتفاق که بصورت تصادفی رخ می دهد ابتدا و انتهاي نام متغیرهاي سراسري را با علامت * نشان می دهند. نام متغیري که ما ایجاد کردیمstar-glob-starتلفظ می شود .

اسلاید 47: شما می توانید با فراخوانیdefconstan ثابت هاي سراسري تعریف کنید.اگر شما بخواهید بررسی کنید که هر سمبول یک متغیر سراسري ویا یک ثابت است ازboundp استفاده می کنیم. > (boundp *glob*)T

اسلاید 48: ( Assignment( انتساب

اسلاید 49: در زبان لیسپ به طور کلی از اپراتورsetf براي انتساب استفاده می شود. ما می توانیم براي انتساب هر نوع متغیري از آن استفاده کنیم> (setf *glob* 98)98> زمانی که اولین آرگومان به setf داده می شود یک سمبولی که نام آن یک متغیر محلی نمی باشد به عنوان یک متغیر سراسري گرفته می شود.

اسلاید 50: شما می توانید بیش از انتساب یک مقدار به متغیر انجام دهید. آرگومان اول برايsetf می تواند یک عبارت همانند نام یک متغیر باشد. > (setf (car x) n)N>x(N B C)

اسلاید 51: یک عبارت نمونه به اینصورت می باشد:(setf a bc de f)با سه بار فراخوانی جداsetf به ترتیب برابراست:(setf a b)(setf c d)(setf e f)

اسلاید 52:

اسلاید 53: منابعPaul Graham.1996. ANSI Common Lisp

18,000 تومان

خرید پاورپوینت توسط کلیه کارت‌های شتاب امکان‌پذیر است و بلافاصله پس از خرید، لینک دانلود پاورپوینت در اختیار شما قرار خواهد گرفت.

در صورت عدم رضایت سفارش برگشت و وجه به حساب شما برگشت داده خواهد شد.

در صورت نیاز با شماره 09353405883 در واتساپ، ایتا و روبیکا تماس بگیرید.

افزودن به سبد خرید