چهارشنبه, ۲۶ دی, ۱۴۰۳ / 15 January, 2025
زبانهای برنامه نویسی در هوش مصنوعی
● عناوین متن
زبانهای برنامهنویسی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 است كه در اواخر دهه ۱۹۵۰ توسط جان مك كارتی توسعه یافته است. Lisp برمبنای نظریه توابع ریاضی و خلاصهسازی Lambda است. تعدادی از كاربردهای مهم و موثرAI در Lisp نوشته شده است. كه ما بعضی از جزئیات این زبان برنامهنویسی را در این مقاله شرح خواهیم داد. در اوایل دهه ۱۹۷۰ یك الگوی برنامهنویسی جدید بنام برنامهنویسی منطقی بر اساس محاسبات گزارهای بوجود آمد. اولین و مهمترین زبان برنامهنویسی منطقی Prolog است كه توسط آلن كالمرار، رابرت كوالسكی و فیلیپ راسل توسعه یافته است. مسئلهها در prolog بصورت حقایق، بدیهیات و قوانین منطقی برای استنباط حقایق جدید بیان میشوند. Prolog با قانون ریاضی در محاسبات گزارهای و نتایج نظری بدست آمده در زمینه اثبات قضیه خودكار در اواخر دهه ۱۹۶۰ بنا نهاده شده است.
II) برنامه نویسی تابعی
یك تابع ریاضی نگاشتی از یك مجموعه (دامنه) به مجموعه دیگر(برد) است. تعریف یك تابع توصیف این نگاشت است كه یا بطور صریح بوسیله شمارش و یا بطور ضمنی بوسیله یك عبارت است. تعریف یك تابع بوسیله نام تابع كه بدنبال آن لیستی از پارامترها در داخل پرانتز قرار دارند و به دنبال آن نیز عبارت توصیفی نگاشت است مشخص می شود مانند:
X یك عدد حقیقی است cube(X) ≡ X X X , where X is a real number.
آلونسو چارچ توابع بی نام را با استفاده از نمادLambda معرفی می كند. یك عبارت Lambda پارامترها و نگاشت تابع را با استفاده از عملگر X مشخص می كند, مانند ۹۵۵; (X)X X X آن خودش تابع است, بنابراین شرح بكار رفته در مثال تابع بی نام با یك آرگومان مشخص است. برای مثال:(۹۵۵; (X) X X X)(۴).
برنامه نویسی در یك زبان تابعی شامل ساختمان تعریف توابع و بكاربردن كامپیوتر برای ارزیابی عبارات است. یعنی بكاربردن توابع با آرگومانهای واقعی. كار اصلی برنامه نویسی پس از ساخت یك تابع برای یك مساله خاص تركیب توابع تعریف شده قبلی با توجه به اصول ریاضی است. كار اصلی كامپیوتر ارزیابی توابع فراخوانی شده و چاپ حاصل مقادیر تابع است. در این روش كامپیوتر مشابه یك كامپیوتر جیبی معمولی بكار می رود البته بسیار انعطاف پذیرتر و قدرتمندتر. یك خاصیت برنامه نویسی تابعی این است كه اگر عبارت به خوبی مقداردهی شود آنگاه ترتیب انجام ارزیابی كامپیوتر در نتایج ارزیابی تاثیری ندارد. بنابراین نتیجه ارزیابی یك عبارت تنها مقدار آن است. بدین معنی است كه در یك زبان تابعی ناب اثرات جانبی وجود ندارد. اثرات جانبی در مدل موقعیت های حافظه به متغیرها متصل شده اند.بنابراین در یك زبان برنامه نویسی ناب در مفهوم زبانهای دستوری متغیر وجود ندارد. روشهای اصلی كنترل جریان، بازگشت (تكرار) و عبارات شرطی هستند. این كاملاً با زبانهای دستوری در مفهوم اساسی كنترل ترتیب و تكرار متفاوت است. برنامه نویسی تابعی نیز خصوصیات توابع مرتبه بالا را پشتیبانی می كند. تابع مرتبه بالا تعریف تابعی است كه اجازه می دهد آرگومانها یا مقدار بازگشتی تابع, مقدار توابع باشند. همه این جوانب با هم مخصوصاً آخری از اصلی ترین مزایای سبك برنامه نویسی تابعی در برابر سبك برنامه نویسی دستوری هستند. خلاصه برنامه نویسی تابعی سطح بالایی از درجه پیمانه ای بودن را فراهم می كند. وقتی یك مسئله با تقسیم آن به مجموعه ای از زیر مسئله ها تعریف می شود, موضوع اصلی روشهایی است كه می توان زیر مسئله ها را به یكدیگر چسباند. بنابراین برای افزایش قابلیت پیمانه ای بودن یك مسئله مفهومی, ابتدا باید نوع جدیدی از چسب در زبان برنامه نویسی فراهم شود- قدرت اصلی برنامه نویسی تابعی .
III) برنامه نویسی تابعی در Lisp
Lisp اولین زبان برنامه نویسی تابعی است: آن برای پشتیبانی محاسبات نمادین با استفاده از لیستهای پیوندی بعنوان ساختار مركزی داده ها ابداع شده بود ( Lisp یعنی پردازشگر لیست). جان مك كارتی دریافت كه روشهای كنترل جریان توابع ریاضی (بازگشت و تكرار) وسیله نظری مناسبی برای انجام محاسبات نمادین هستند. علاوه براین مفاهیم خلاصه سازی تابعی و كاربرد تابعی تعریف شده در محاسبات Lambda , سطح بالایی از خلاصه سازی موردنیاز برای مسئله های AI مشخص شده را فراهم می كنند.
Lisp در سال ۱۹۵۸ توسط مك كارتی ابداع شد و اولین نگارش محیط برنامه نویسی Lisp در سال ۱۹۶۰ آماده شد كه شامل یك مفسر, یك كامپایلر و مكانیسم تخصیص و بازپسگیری حافظه پویا بود (بعنوان مجموعه فضای هرز شناخته شده است). یكسال بعد اولین زبان استاندارد با نام Lisp۱.۵ معرفی شد. پس از آن تعدادی از نسخه ها و محیط های برنامه نویسی Lisp توسعه یافته اند. مانند MacLisp، FranzLisp، InterLisp، CommonLisp، Scheme هر چند آنها در بعضی جزئیات خاص متفاوتند ولی هسته Syntax (نحو) و Semantic (معنی) آنها اساساً یكسان است. هسته را در جای دیگر معرفی خواهیم كرد. پر استفاده ترین نسخههای
Lisp ، Common Lisp و scheme هستند. در این مقاله ما Common Lisp را برای نشان دادن جنبه های مختلف Lisp با مثالهای معمولی انتخاب كرده ایم. هرچند مثالها نیز به راحتی می توانند در نسخه های دیگر Lisp سازگار شوند.
Syntax .A. (نحو) و semantics (معانی) Lisp
۱) عبارات نمادین:
عناصر نحوی Lisp عبارات نمادین نامیده می شوند (كه به صورتS-expressionsشناخته شدهاند). داده ها و توابع (یعنی برنامه های Lisp ) بصورت عبارات نمادین نشان داده شده اند كه می توانند اتم ها یا لیست ها باشند. اتم ها كلمه ای شبیه اشیا هستند. اتمها وابسته به نوع كاراكترهایی كه برای شكل دادن یك اتم مجازند می توانند به انواع مختلفی تقسیم شوند. انواع اصلی عبارتنداز:
Numbers:۱ ۲۳۴-۴۳.۱۴۱۵۹۲۶۵۳۵۸۹۷۹ -۷.۵ ۶.۰۲E+۲۳
Symbols:SymbolSym۲۳another-one t false NILBLUE
Strings: This is a string۹۷۷? setqHe said: \ Im here.\
توضیح اینكه هرچند نماد خاصی مثل BLUE استفاده میشود چون مفهوم مشخص برای برنامهنویسی دارد، اما بزودی Lisp تنها ترتیبی از حروف یا تنها یك نماد است. لیستها بندی شبیه اشیاء هستند. یك لیست شامل یك پرانتز باز( دنبالهای از اعداد دلخواه كه بوسیله فاصله خالی از هم جدا میشوند) و یك پرانتز بسته هستند. هر عنصر لیست میتواند یك اتم یا لیست باشد. اینها مثالهایی از لیستها هستند:
(This is a list) ((this) ((too))) () (((((((())))))))
(a b c d) (john mary tom) (loves john ?X)
(* (+ ۳ ۴) ۸) (append (a b c) (۱ ۲ ۳))
(defun member (elem list)
(if (eq elem (first list)) T
(member elem (rest list))))
توضیح اینكه در بسیاری از مثالها عناصر لیست خود لیستها هستند.چنین لیستهایی، لیستهای تو در تو نامیده میشوند. در مورد تو در تویی محدودیتی وجود ندارد. برای مثال یكی از قویترین Lisp ها را شرح میدهیم: پیچیدهترین اشیاء را به راحتی میتوان نوشت. تنها چیزی كه در نظر گرفته میشود درستی عدد داخل پرانتزهاست. مهم توضیح این است كه معنی وابسته به یك لیست نمایش ویژه یا اتم در لیست نمایش وارد نمیشود. به این معنی كه همه عبارات نمادین كه در بالا توصیف شده است از لحاظ نحو برنامههای Lisp را اصلاح میكنند ولی الزاماً از لحاظ معنی (semantic) برنامهها رااصلاح نمیكنند.
۲) Semantics (معانی):
هسته هر سیستم برنامهنویسی Lisp مفسر است كه كارش محاسبه مقدار برای یك عبارات نمادین داده شده است. این فرآیند ارزیابی نام دارد. نتیجه یا مقدار یك عبارت نمادین، یك عبارت نمادین است. كه بعد از كامل شدن ارزیابی برگردانده شده است. توضیح اینكه در واقع Lispدارای Semantics (معانی) عملیاتی است كه با یك تعریف ریاضی دقیق از نظریه تابع بازگشتی بدست میآید.
نویسنده: Gunter Neumann
German Research Center for Artificial Intelligence (LT–Lab, DFKI)
ترجمه: احد محمّدی خواجه
E-mail: ae۱۳۵۹m@gmail.com
دانشجوی كارشناسی ناپیوسته كامپیوتر(تراكتورسازی تبریز)
این مقاله ترجمهای است از:
Neumann, Gunter Programming Languages in Artificial Intelligence. In: Bentley & Bidgoli: Encyclopedia of Information Systems,
Academic Press, San Diego, ۲۰۰۲
http://www.dfki.de/~neumann/publications/new-ps/ai-pgr.pdf
VI. منابعی برای مطالعه بیشتر
۱.Charniak, E., Riesbeck, C.K., McDermott, D.V. and Meehan, J.R., ۱۹۸۰, Artificial Intelli- gence Programming, Lawrence Erlbaum Associates, Hillsdale, New Jersey.
۲.Clocksin, W.F. and Mellish, C.S, ۱۹۸۷, Programming in Prolog, Springer, Berlin, Germany.
۳.Keene, S.E., ۱۹۸۸, Object–Oriented Programming in Common Lisp, Addison–Wesley, Read-ing, Massachusetts.
۴.Luger, G.F. and Stubblefield, W.A., ۱۹۹۳, Artificial Int elligence: Structures and Strategies
for Complex Problem Solving, second edition, Benjamin/Cummings, Redwood City, Cali-fornia.
۵.Norvig, P., ۱۹۹۲, Artificial Intellig ence Programming, Morgan Kaufman Publishers, San ateo, California.
۶.Pereira, F.C.N. and Shieber, S.M., ۱۹۸۷, Prolog and Natural Language Analysis, CSLI Lecture Notes, Number ۱۰, Stanford University Press, Stanford, California, ۱۹۸۷.
۷.Sebesta, R.W., ۱۹۹۹, Concepts of Programming Languages, fourth edition, Addison–Wesley, Reading, Massachusetts.
۸.Ullman, J.D., ۱۹۹۷, Elements of ML Programming, second edition, Prentice-Hall.
۹.Watson, M., ۱۹۹۷, Intelligent Java Applications for the Internet and Intranets, Morgan Kaufman Publishers, San Mateo, California.
ایران مسعود پزشکیان دولت چهاردهم پزشکیان مجلس شورای اسلامی محمدرضا عارف دولت مجلس کابینه دولت چهاردهم اسماعیل هنیه کابینه پزشکیان محمدجواد ظریف
پیاده روی اربعین تهران عراق پلیس تصادف هواشناسی شهرداری تهران سرقت بازنشستگان قتل آموزش و پرورش دستگیری
ایران خودرو خودرو وام قیمت طلا قیمت دلار قیمت خودرو بانک مرکزی برق بازار خودرو بورس بازار سرمایه قیمت سکه
میراث فرهنگی میدان آزادی سینما رهبر انقلاب بیتا فرهی وزارت فرهنگ و ارشاد اسلامی سینمای ایران تلویزیون کتاب تئاتر موسیقی
وزارت علوم تحقیقات و فناوری آزمون
رژیم صهیونیستی غزه روسیه حماس آمریکا فلسطین جنگ غزه اوکراین حزب الله لبنان دونالد ترامپ طوفان الاقصی ترکیه
پرسپولیس فوتبال ذوب آهن لیگ برتر استقلال لیگ برتر ایران المپیک المپیک 2024 پاریس رئال مادرید لیگ برتر فوتبال ایران مهدی تاج باشگاه پرسپولیس
هوش مصنوعی فناوری سامسونگ ایلان ماسک گوگل تلگرام گوشی ستار هاشمی مریخ روزنامه
فشار خون آلزایمر رژیم غذایی مغز دیابت چاقی افسردگی سلامت پوست