در زمینه هوش مصنوعی با توجه به این كه در بسیاری از زمینههای خاص گرایش وجود دارد، لذا روشهای ذهنی نیز باید به وسیله تولید و آزمون (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) استفاده میكند. كه این روش برای پیمایش فضای جستجو به كار میرود.
منابع:
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
http://www.jamejamonline.ir/papertext.aspx?newsnum=100846617843