حسین کعبی: وقتی فیگو را در جام جهانی زدم....
در زمینه هوش مصنوعی با توجه به این که در بسیاری از زمینههای خاص گرایش وجود دارد، لذا روشهای ذهنی نیز باید به وسیله تولید و آزمون (Generate and test) توسعه یابد. در برنامهنویسی (Artificial Intelligence AI) پیادهسازی در واقع جزئی از پردازش مشخصات مساله است. با توجه به مشخصات محاسبات رایانهای و برنامهنویسی هوشمند 2 روش جدید برنامهنویسی به وجود میآید، روش برنامهنویسی تابعی و روش برنامهنویسی منطقی که هر دو بر مبنای ریاضیات و نظریه توابع بازگشتی طرحریزی شده است.
اولین زبان برنامهنویسی AI که هنوز به طور گسترده استفاده میشود، زبان برنامهنویسی LISP است که نظریه توابع ریاضی در اواخر دهه ۱۹۵۰ توسط جان مک کارتی به وجود آمد. اوایل دهه ۱۹۷۰ یک الگوی برنامهنویسی جدید به نام برنامهنویسی منطقی بر اساس محاسبات گزارهای رایج شد. اولین و مهمترین زبان برنامهنویسی منطقی prolog است که توسط آلن کولمرائور و فیلیپ راسل توسعه یافت. مسائل در prolog به صورت حقایق و قوانین منطقی برای استدلال و استنتاج بیان میشود.
برنامهنویسی تابعی
یک تابع ریاضی نگاشتی از یکی مجموعه (دامنه) به مجموعه دیگر (برد) است. تعریف یک تابع توصیفی این نگاشت است که یا بصراحت به وسیله شمارش یا به طور ضمنی به وسیله یک عبارت است.
برنامهنویسی در یک زبان تابعی شامل ساختمان تعریف توابع و به کاربردن رایانه برای ارزیابی عبارات است، یعنی به کاربردن توابع با آرگومانهای واقعی. کار اصلی رایانه، ارزیابی توابع فراخوانی شده و چاپ حاصل مقادیر تابع است. یک خاصیت برنامهنویسی تابعی علاوه بر انعطافپذیر بودن آن، این است که اگر عبارت بخوبی مقداردهی شود، آن گاه توالی انجام ارزیابی در نتایج آن تاثیری ندارد.
بنابراین، نتیجه ارزیابی یک عبارت تنها مقدار آن است و درواقع در مفهوم زبانهای دستوری متغیر وجود ندارد و روشهای اصلی کنترل توابع تکرار (بازگشتی) و به عبارتی شرطی است. برنامهنویسی تابعی خصوصیات توابع مرتبه بالا را پشتیبانی میکند. توابع مرتبه بالا تعریف تابعی است که اجازه میدهد آرگومانها یا مقدار بازگشتی توابع، مقدار خروجی خود تابع باشد.
LISP اولین زبان برنامهنویسی تابعی است که با استفاده از لیستهای پیوندی (Linked List) به عنوان ساختار مرکزی دادهها ابداع شد. اولین نگارش محیط برنامهنویسی LISP سال ۱۹۶۰ آماده شد که شامل یک مفسر، یک کامپایلر و مکانیزم تخصیص حافظه و برگشت حافظه پویا بود. یک سال بعد اولین زبان استاندارد با نام LISPY.S معرفی شد، پس از آن تعدادی از نسخهها و محیطهای برنامهنویسی LISP توسعه یافتند، مانند: MacLISP، FranzLISP، InterLISP و... . هرچند در بعضی از جزئیات خاص متفاوتند، ولی هسته اصلی ساختار جملات (Syntax) و ارتباط بین آنها (Semantic) اساسا یکسان است. پراستفادهترین نسخههای LISP، Common LISP و Schema هستند. در کنار LISP تعدادی از زبانهای برنامهنویسی تابعی دیگر نیز توسعه یافتند، برای مثال ML که برگرفته از Meta Language است، یک زبان برنامهنویسی تابعی با دامنه ایستا (Static) است و تفاوت اصلی آن با زبان LISP در Syntax (گرامر) آن است. بیشتر شبیه زبان برنامهنویسی پاسکال است. Haskell نیز دارای خاصیت گرامری مشابه با ML با دامنه ایستاست و تفاوت آن زبان ML در آن است که شامل هیچگونه ویژگی دستوری نیست. لیستها رایجترین ساختار داده در Haskell هستند.
برنامهنویسی منطقی
دهه ۱۹۷۰ یک الگوی دیگر برای محاسبات در برنامهنویسی AI ارائه شد. Prolog یا همان برنامهنویسی منطقی (Programming Logic) اولین زبان برنامهنویسی بر مبنای منطق است. اساس Prolog شامل یک روش برای مشخص کردن گزارههای محاسبات گزارهای و تصمیمات محدود است. برنامهنویسی در Prolog شامل مشخصات حقیقی در مورد اشیا و ارتباط بین آنها و قوانینی است که این ارتباطات را مشخص میکند. Prolog با برنامهنویسی تابعی در نحوه محاسبه نتیجه کاملا متفاوت است، زیرا نحوه محاسبه نتیجه را مشخص نمیکند، بلکه تنها ساختاری منطقی نتیجه را ارائه میدهد.
با استفاده از Prolog برنامهنویسی میتواند در یک سطح خیلی خلاصه و کاملا نزدیک به مشخصات یک مساله انجام گیرد. Prolog هنوز هم تهیه زبان برنامهنویسی منطقی است.
Prolog در بیشتر زمینههای AI مانند سیستمهای خبره، پردازش زبان طبیعی به طور موفقیتآمیزی استفاده شده که امتحان خود را در زمینههای دیگری مانند سیستمهای مدیریت پایگاه داده نیز پس داده است. جملات برنامههای Prolog شامل مجموعهای از جملات به نام بند (Clause) هستند که برای نمایش دادهها و برنامهها استفاده میشوند. یک واژه میتواند یک ثابت (نامهای نمادین یا حروف بزرگ)، یک قیفر (نمادهایی که با حروف کوچک شروع میشوند مانند x) یا یک تابع باشد. فرآیند استنتاج Prolog شامل 2 مولفه اصلی است:
1 ـ روش جستجو(Search): برای جستجو میان حقایق و قوانین در پایگاه دانش به کار میرود.
2 ـ یکسانکننده (Unifier): برای تطبیق الگو و باز گرداندن اتصالاتی که یک عبارت صحیح میسازد، کاربرد دارد. یکسانسازی در Prolog بسیار مهم و دارای پیچیدگیهای خاص خود است و معمولا روی 2 واژه به کار میرود و سعی میکند با ترکیب آن دو یک واژه جدید تشکیل بدهد. Prolog از یک روش جستجوی عمقی (Depth first search) استفاده میکند. که این روش برای پیمایش فضای جستجو به کار میرود.
منابع:
Programming Languages in Artificial Intelligence
Gunter Neumann,German Research Center for Artificial Intelligence (LT–Lab, DFKI)
http://en.wikipedia.org/wiki/List_of_programming_languages_for_artificial_intelligence
http://www.britannica.com/EBchecked/topic/1473945/artificial-intelligence-programming-language
http://www.inf.ed.ac.uk/teaching/courses/aipp/
http://mind.sourceforge.net/forth.html
محمدحسین اژدست
حسین کعبی: وقتی فیگو را در جام جهانی زدم....