زبانهای برنامهنویسیAI، برنامهنویسی تابعی ، برنامهنویسی تابعی در Lisp ، A- Syntax (نحو) و semantic های (معانی) Lisp ، لیست انواع داده ، تعریف توابع جدید ، تعریف ساختارهای کنترلی ، تعریف توابع بازگشتی ، توابع مرتبه بالا ، سایر زبانهای برنامهنویسی تابعی غیر از Lisp ، برنامهنویسی منطقی در Prolog ، سایر روشهای برنامهنویسی
واژه نامه
بندهای برنامه Prolog شامل مجموعهای از جملات بنام بندها هستند که برای نشان دادن دادهها و برنامهها بکار میروند.
تابع مرتبه بالا تعریف تابعی است که اجازه میدهد آرگومانها یا مقدار بازگشتی تابع، مقدار توابع باشد. نماد ساختار لیستها اغلب نشاندهنده نحوه استفاده از لیست ساختاری داده هستند، که یک عنصر لیست ممکن است نماد یا لیست دیگر باشد. لیستها ساختاری مرکزی Lisp هستند که برای نشان دادن دادهها و برنامهها بکار میروند. بازگشت تکنیکی الگوریتمی برای انجام یک کار است که یک تابع با بعضی از قسمتهای کار خودش را فراخوانی میکند.
محاسبات نمادین برنامهنویسی AI (اساساً) شامل دستکاری نمادها است نه اعداد. این نمادها میتوانند اشیاء در جهان و ارتباط بین آن اشیاء را نشان دهند- ساختارهای پیچیده نمادها نیاز به دانش ما از جهان دارند. واژه ساختار اساسی دادهها در Prolog واژهای است که میتواند یک ثابت، یک متغیر یا یک ساختار باشد. ساختارها موضوعات ریز محاسبات گزارهای را نشان میدهند و شامل یک عملگر نام و یک پارامتر لیست هستند.
زبانهای برنامهنویسی هوش مصنوعی(AI) ابزار اصلی بررسی و ساخت برنامههای کامپیوتری هستند که میتوانند در شبیهسازی فرایندهای هوشمند مانند یادگیری، استدلال و فهم اطلاعات نمادین بکار بروند. هر چند اخیراً زبان کامپیوتر اصولاً برای استفاده از کامپیوترها برای انجام محاسبات با اعداد طراحی شده بود، اما بزودی دریافتند که رشتهای از بیتها نه تنها اعداد بلکه میتوانند اشیای دلخواه را نیز نمایش دهند. عملیات روی ویژهگیها یا نمادها میتواند با استفاده از قوانین برای ایجاد، انتساب یا دستکاری نشان داده شود. این تصور از محاسبات نمادین بعنوان تعریف الگوریتمهایی که هر نوع اطلاعات را پردازش میکنند و بنابراین میتواند برای شبیهسازی هوش انسان بکار برود مناسب است.
بزودی برنامه نویسی با نمادها که نیاز به سطح بالایی از چکیدگی دارند تولید میشوند، غیر از امکاناتی که با زبانهای برنامه نویسی مخصوص پردازش اعداد ممکن بود مانند فرترن
I-زبانهای برنامه نویسی AI
در AI خودکار کردن یا برنامهنویسی همه جنبههای شناخت انسانی بوسیله بنیادهای شناخت علمی روشهای نمادین و غیر نمادین AI، پردازش زبان طبیعی، دید کامپیوتری و سیستمهای تکامل یا سازگار مطرح میشود. لازم است دامنه مسئلههای خیلی پیچیده در ابتدای مرحله برنامهنویسی یک مسئله AI معین، مشخص شود که کافی نیست. تنها بوسیله تعامل و افزایش اصلاحات خصوصیات بسیار دقیق ممکن است. در حقیقت مسئلههای معمول AI به بسیاری از زمینههای خاص گرایش دارند، بنابراین روشهای ذهنی باید بوسیله تولید و آزمایش روشها بطور تجربی توسعه یابند(مشهور به نمونه سازی سریع). در اینصورت برنامهنویسی AI بطور قابل توجهی با روشهای استاندارد مهندسی نرمافزار متفاوت بوده زیرا برنامهنویسی معمولا از یک مشخصات رسمی با جزئیات شروع میشود. در برنامهنویسی AI پیادهسازی در واقع جزئی از پردازش مشخصات مسئله است. به اقتضای طبیعت مسئلههای AI برنامهنویسی AI مزایای بسیاری دارد اگر زبانهای برنامه نویسی، برنامهنویسAI را آزاد بگذارند و در بسیاری از ساختارهای فنی محدود نکنند (مانند ساختار انواع دادهای جدید سطح پایین، دستیابی دستی به حافظه). ترجیحاً سبک برنامهنویسی اعلانی برای استفاده در ساختارهای پیشساخته دادهای سطح بالا(مانند لیستها و درختها) و عملیات(مانند تطبیق الگوها) مناسب است، بنابراین محاسبات نمادین سطح خلاصهسازی بیشتری نسبت به آنچه که با زبانهای دستوری استاندارد مانند فرترن، پاسکال یا C امکانپذیر خواهد بود را پشتیبانی میکند. البته طبقهبندی خلاصه سازی آسان نیست، زیرا تدوین برنامههای AI روی کامپیوترهای استاندارد وان نیومن نمیتواند به کارآمدی زبانهای دستوری باشد. هر چند یک مسئله مسلم AI فهم آن است (حداقل جزئیات) امکان دارد با تنظیم مجدد آن به شکل خصوصیات جزئی شده با بکار بردن یک زبان دستوری پیاده سازی مجدد شود. با توجه به نیازمندیهای محاسبات نمادین و برنامهنویسی AI دو الگوی جدید برنامهنویسی که به سبک دستوری پیشنهاد میشوند بوجود میآید: سبک برنامهنویسی تابعی و منطقی. هر دو بر مبنای ریاضیات طرحریزی شدهاند، یعنی نظریه توابع بازگشتی و منطق رسمی. اولین زبان برنامهنویسی AI کاربردی که هنوز هم بطور گسترده استفاده میشود زبان برنامهنویسی Lisp است که در اواخر دهه 1950 توسط جان مک کارتی توسعه یافته است. Lisp برمبنای نظریه توابع ریاضی و خلاصهسازی Lambda است. تعدادی از کاربردهای مهم و موثرAI در Lisp نوشته شده است. که ما بعضی از جزئیات این زبان برنامهنویسی را در این مقاله شرح خواهیم داد. در اوایل دهه 1970 یک الگوی برنامهنویسی جدید بنام برنامهنویسی منطقی بر اساس محاسبات گزارهای بوجود آمد. اولین و مهمترین زبان برنامهنویسی منطقی Prolog است که توسط آلن کالمرار، رابرت کوالسکی و فیلیپ راسل توسعه یافته است. مسئلهها در prolog بصورت حقایق، بدیهیات و قوانین منطقی برای استنباط حقایق جدید بیان میشوند. Prolog با قانون ریاضی در محاسبات گزارهای و نتایج نظری بدست آمده در زمینه اثبات قضیه خودکار در اواخر دهه 1960 بنا نهاده شده است.
II- برنامه نویسی تابعی
یک تابع ریاضی نگاشتی از یک مجموعه (دامنه) به مجموعه دیگر(برد) است. تعریف یک تابع توصیف این نگاشت است که یا بطور صریح بوسیله شمارش و یا بطور ضمنی بوسیله یک عبارت است. تعریف یک تابع بوسیله نام تابع که بدنبال آن لیستی از پارامترها در داخل پرانتز قرار دارند و به دنبال آن نیز عبارت توصیفی نگاشت است مشخص می شود مانند:
X یک عدد حقیقی است cube(X) ≡ X X X , where X is a real number.
آلونسو چارچ توابع بی نام را با استفاده از نمادLambda معرفی می کند. یک عبارت Lambda پارامترها و نگاشت تابع را با استفاده از عملگر X مشخص می کند, مانند λ (X)X X X آن خودش تابع است, بنابراین شرح بکار رفته در مثال تابع بی نام با یک آرگومان مشخص است. برای مثال:(λ (X) X X X)(4).
برنامه نویسی در یک زبان تابعی شامل ساختمان تعریف توابع و بکاربردن کامپیوتر برای ارزیابی عبارات است. یعنی بکاربردن توابع با آرگومانهای واقعی. کار اصلی برنامه نویسی پس از ساخت یک تابع برای یک مساله خاص ترکیب توابع تعریف شده قبلی با توجه به اصول ریاضی است. کار اصلی کامپیوتر ارزیابی توابع فراخوانی شده و چاپ حاصل مقادیر تابع است. در این روش کامپیوتر مشابه یک کامپیوتر جیبی معمولی بکار می رود البته بسیار انعطاف پذیرتر و قدرتمندتر. یک خاصیت برنامه نویسی تابعی این است که اگر عبارت به خوبی مقداردهی شود آنگاه ترتیب انجام ارزیابی کامپیوتر در نتایج ارزیابی تاثیری ندارد. بنابراین نتیجه ارزیابی یک عبارت تنها مقدار آن است. بدین معنی است که در یک زبان تابعی ناب اثرات جانبی وجود ندارد. اثرات جانبی در مدل موقعیت های حافظه به متغیرها متصل شده اند.بنابراین در یک زبان برنامه نویسی ناب در مفهوم زبانهای دستوری متغیر وجود ندارد. روشهای اصلی کنترل جریان، بازگشت (تکرار) و عبارات شرطی هستند. این کاملاً با زبانهای دستوری در مفهوم اساسی کنترل ترتیب و تکرار متفاوت است. برنامه نویسی تابعی نیز خصوصیات توابع مرتبه بالا را پشتیبانی می کند. تابع مرتبه بالا تعریف تابعی است که اجازه می دهد آرگومانها یا مقدار بازگشتی تابع, مقدار توابع باشند. همه این جوانب با هم مخصوصاً آخری از اصلی ترین مزایای سبک برنامه نویسی تابعی در برابر سبک برنامه نویسی دستوری هستند. خلاصه برنامه نویسی تابعی سطح بالایی از درجه پیمانه ای بودن را فراهم می کند. وقتی یک مسئله با تقسیم آن به مجموعه ای از زیر مسئله ها تعریف می شود, موضوع اصلی روشهایی است که می توان زیر مسئله ها را به یکدیگر چسباند. بنابراین برای افزایش قابلیت پیمانه ای بودن یک مسئله مفهومی, ابتدا باید نوع جدیدی از چسب در زبان برنامه نویسی فراهم شود- قدرت اصلی برنامه نویسی تابعی .
III- برنامه نویسی تابعی در Lisp
Lisp اولین زبان برنامه نویسی تابعی است: آن برای پشتیبانی محاسبات نمادین با استفاده از لیستهای پیوندی بعنوان ساختار مرکزی داده ها ابداع شده بود ( Lisp یعنی پردازشگر لیست). جان مک کارتی دریافت که روشهای کنترل جریان توابع ریاضی (بازگشت و تکرار) وسیله نظری مناسبی برای انجام محاسبات نمادین هستند. علاوه براین مفاهیم خلاصه سازی تابعی و کاربرد تابعی تعریف شده در محاسبات Lambda , سطح بالایی از خلاصه سازی موردنیاز برای مسئله های AI مشخص شده را فراهم می کنند
شامل 41 صقحه Word
دانلود تحقیق زبانهای برنامهنویسی در هوش مصنوعی