اگه منبع رو برای پرولوگ میخواید میتونی به این لینک سر بزنیدو فایل پرولوگ رو دانلود کنید این اسلاید برای نوشتن یه برنامه کامل پرولوگ مثل پازل 8 یا بازیهای دیگه کافیه
What is Visual Prolog
Visual Prolog is a logical programming language that counts PDC Prolog and Turbo Prolog as predecessors.
The goal of Visual Prolog is to support industrial strength programming of complex knowledge emphasized problems.
Today Visual Prolog is a very powerful and safe programming language combining the very best features of logical, functional and object-oriented programming paradigms in a consistent and elegant way.
Visual Prolog 7.1
Commercial Edition
for Windows Vista/XP/2000
به وسیله برآورده کردن نیازهای گفته شده، LISP و PROLOG هر دو دارای زبانهای برنامه نویسی غنی و کاملی هستند وقتی که این زبانها را فرا می گیریم، دانشجو در ذهن و فکر دربارة روشهایی که آنها به وسیله ویژگیهای خاص هر زبان پشتیبانی می کنند، نیازها را نگه داری می کنند.
PROLOG
PROLOG یکی از بهترین نمونه و مثال یک زبان برنامه نویسی منطقی است. یک برنامه منطقی دارای یک سری ویژگیهای قانون و منطق است . PROLOG از محاسبة اولیه استفاده می کند. در حقیقت خود این نام از برنامه نویسی PRO در LOGIC می آید یک مفسر برنامه را بر اساس یک منطق می نویسد. ایده استفاده توصیفی محاسبه اولیه برای بیان خصوصیات حل مسئله یکی از محوریت های مشارکتPROLOG می باشد که برای علم کامپیوتر به طور کلی و به طور اخص برای زبان برنامه نویسی هوشمند مورد استفاده قرار می گیرند. نفع اسفتاده از محاسبه اولیه برای برنامه نویسی شامل یک ساختار ظریف و ساده و قابل معنی می شود.
به دلیل همین خصوصیات است که PROLOG به عنوان یک محرک اصلی و مفید برای تحقیقاتی مثل موارد برنامه نویسی آزمایشی به عنوان یک کد، متغیر کردن برنامه و طراحی ویـــژگیهـای زبان سطح بالا، مطرح است. PROLOG و دیگر زبانهای منطقی یک سبک برنامه نویسی مشخصی را دنبال می کنند که در آنها برنامه ها به صورت دستورات پشت سرهم و متوالی برای ایجاد یک الگوریتم، نوشته می شوند. این نوع برنامه اصولاً به کامپیوتر می گوید که «چه چیزی درست است» و «چه چیزی باید صورت گیرد» و این به برنامه نویس اجازه می دهد که بر روی حل مسئله به صورت یک سری خصوصیات از یک محدوده تأکید کند تا اینکه بخواهد به جزئیات نوشتاری سطح پائین ساختارهای الگوریتمی برای بعد بپردازد.
اولین برنامه PROLOG در مارسی فرانسه در اوایل 1970 به عنوان بخشی از زبان معمول یک پروژه نوشته شد. تئوری نهفته در پشت این زبان در کارهای کوالسکی،هیز و دیگران آورده شده است. عمدة توسعة PROLOG بین سالهای 1975 تا 1979 در بخش هوش مصنوعی دانشگاه ادینبورگ صورت گرفت.
در آنجا یک گروه مسئولیت کاربرد اولین PROLOG را به عهده داشتند که آقای David H.D مسئول آن بود. این گروه اولین PROLOG را ساخت که می توانست محاسبات کلی را انجام دهد. این محصول بر اساس سیستم DEC-10 ساخته شده بود و می توانست در مدهای توصیفی و مقایسه ای کارآئی داشته باشد.
مزیت این زبان به وسیله پروژه هایی که برای ارزیابی و گسترش قدرت بیان برنامه های منطقی نوشته شده اند، اثبات شده است.
بحث دربارة یک چنین کاربردهایی می تواند در سمینار و گردهمائی های مربوط به زبان برنامه نویسی هوش مصنوعی در سطح بین المللی مطرح شود.
LISP
LISP اولین بار به وسیله JACK MCCARTHY در اواخر دهه 1950 مطرح شد این زبان به عنوان یک مدل پیوسته محاسباتی بر اساس تئوری عملکرد مجدد،معرفی شد.
در مقالات اولیة مک کارتی (1960) اهداف خود را مشخص می کند: ایجاد یک زبان سمبولیک تا یک زبان محاسباتی. ایجاد زبانی که بتوان از آن به عنوان یک مدل محاسباتی بر اساس تئوری عملکرد مجدد استفاده کرد و از آن بتوان برای تعریف دقیق یک ساختار و تعریف زبانی استفاده کرد.
گر چه LISP یکی از قدیمی ترین زبانهای محاسباتی است که هنوز فعال است، ولی دقت کافی در برنامه نویسی و طراحی توسعه باعث شده که این یک زبان برنامه نویسی فعال باقی بما ند.
در حقیقت این مدل برنامه نویسی طوری مؤثر بوده است، که تعدادی از دیگر زبانها بر اساس عملکرد برنامه نویسی آن واقع شده اند مثل FP ، ML و SCHEME .
این لیست اساس برنامه ها و ساختارهای اطلاعاتی در LISP است، LISP خلاصه شده نام پروسه LIS است. این برنامه یک سری لیست های عملکردی درون ساختاری دارد.
LISP به برنامه نویس قدرت کامل برای اتصال به ساختارهای اطلاعاتی را می دهد.
اصولاً LISP یک زبان کامل است که دارای عملکردها ولیست های لازمه برای توصیف عملکردهای جدید، تشخیص تناسب و ارزیابی معانی می باشد.
تنها هدف کنترل برنامه بازگشت و شرایط منحصر به فرد است. عملکردهای کامل تر هنگامی که لا زم باشد در قالب این اصول تعریف می شوند. در طی زمان بهترین عملکردها به عنوان بخشی از زبان می شوند. پروسه توسعة زبان به وسیلة اضافه کردن عملکردهای جدید موجب توسعه محورهای زیادی از LISP می شوند که اغلب شامل صدها عملکرد بخصوص برای ایجاد اطلاعات کنترل برنامه، خروجی و ورودی، Edit کردن عملکردهای LISP می شوند.
این ارتباطات محرکه ای هستند که به وسیله LISP از یک مدل ساده و ظریف به یک مدل قوی و غنی و عملکردی برای ساخت سیستم های نرم افزاری بزرگ، تبدیل می شود.
یکی ازمهم ترین برنامه های مرتبط با LISP برنامه SCHEME می باشد که یک تفکر دوباره دربارة زبان در آن وجود دارد که به وسیله توسعه AI وبرای آموزش اصول مفاهیم علم کامپیوتر مورد استفاده قرار می گیرند.
برنامه نویسی شیء گرا
برخلاف برنامه LISP و PROLOG ،برنامه شیء گرا ریشه در مهندسی نرم افزار دارد. اولین بار در سال 1970 توسعه یافته که به وسیله Alan Kay این تحقیقات صورت گرفته است.
ساخت ایده ها از محرک، که زبان نروژی تظاهر می کند در سال 1960 و مقاله Symour در استفاده از LOGO برای آموزش کودکان، صورت پذیرفته است.
استفاده از Dyna book برای اولین بار به عنوان یک کامپیوتر، که افرادی به غیر متخصصان علم کامپیوتر با آن سروکار داشتند.
بـــه دلیل اینکه کاربر افراد معمولی بودند سیستم عملکرد و کاربرد نرم افزار نباید تکنیکی می بود و به سادگی قابل تشخیص بود. راه حل آنها برای این مسئله یک مداخلة گرافیکی است با استفاده از منوها و آیکون های گرافیکی و اشاره گرها، یک موس یا یک سری برنامه ها برای ادیت کردن، داده ها می باشد.
دخالت کاربر در طراحی یک notebook متأثر از طراحی کاربرها برای یک سری کامپیوترهای تخصصی مثل سیستم های به کارگیری کامپیوتر شخصی مثل مکینتاش، مایکروسافت و محل های مربوط به ویندوز می باشد.
در یک برنامه small talk ،همه چیز در قالب هدف و یک ساختار قابل محاسبه مرک و قراردادی مطرح می شود. اهداف نه فقط شامل انواع اطلاعات برای محاسبه بلکه شامل انواع روشهای لازم برای محاسبه حالت و وضعیت هدف نیز می شوند.
ارزشهای یک هدف به صورت کلاس ها بیان می شود. اهداف ممکن است اهداف طبقه بندی شده که توصیف کنندة تمامی مواد یک نمونه باشد و بیانگر نوع ذات و توصیف تما می موارد یا مواردی که بیانگر یک عضو واحد هستند را شامل شود.
وقتی مواردی از یک نوع اطلاعات به وسیله اهداف توصیف می شود این موارد ذاتاً دارای نوع توصیف و روشهای توصیفی از عملگرهایشان می باشند،برای شکل دادن یک عملیات بر روی یک هدف، یک پیام به سمت هدف فرستاده شده که حاصل روش مناسبی می باشد. به عنوان مثال، اضافه کردن 3 و 4 پیام 4+ به سمت شیء 3 فرستاده می شود و 3 پاسخ می دهد می شود 7 .
به وسیله ایجاد انواع ترکیب اطلاعات و عمل بر روی آنها در یک عمل واحد مربوط به هدف، small talk از کد Modular (پیمانه ای) توسعه و نوع کاربرد برای عناصر اطلاعات و کد مربوط به تکثیر آنها، پشتیبانی می کند.
به دلیل اینکه اهداف small talk در قالب یک کلاس شبکه ای همراه با اهداف کاملاً ویژه که بخشی از تمامی روش هــای کاملاً کلی است ، بسیار ساده است که یک ساختار جدید برنامه ای توصیف کنیم که عملاً با اهداف موجود در برنامه همراه باشد. بنابراین یک برنامه اصولاً می تواند قدرت کامل یک سیستم باشد که شامل گرافیک،بازنگری و ارتباط است.
علاوه بر این روش های توسعه نرم افزاری مثل ارائه اطلاعات و زبانهای نهفته، فشار بر اپراتور و استفاده از کدها از طریق یک گروه اصلی و زبانهای نهفته در قالب یک مدل رایج پشتیبانی می شوند.
زبانهای شیءگرا همراه با بسیاری از خصوصیات مندرج در یک کلاس اطلاعاتی، شامل کلاس اصلی و توانایی پاسخ در ساختار اطلاعات می شود به همین دلایل زبانهای شیءگرا در برنامه نویسی AI استفاده می شوند.
از دوستانی که به این زبان مسلط هستند خواهش میکنم توضیح بیشتر بدن
من سعی میکنم یکسری منابع یادگیری و بعضی مقالات درباره این زبانها رو در اينجا قرار بدم!
پرولوگ مخفف عبارت «برنامهنویسی منطقی» به زبان فرانسویه.در واقع مهمترین زبان برنامه نویسی منطقیه و برخلاف زبانهای دیگه همه منظوره نیست.کاربردهاش در تقاضای بانک اطلاعاتی و اثبات ریاضیه
هدف پرولوگ ارائه مشخصات یک راه حله به طوریکه کامپیوتر بتونه ترتیب اجرای اون راه حل رو پیدا کنه به جای اینکه الگوریتم راه حل ارائه بشه، یعنی در حقیقت خود زبان در حال رشد و کسب تجربست!
و در ادامه بايد بگم كه كاملا متفاوت با زبان هاي برنامه نويسي متداوله در واقع منطبق بر روشهاي زنجيره اي هوش مصنوعي Backward Chainingو به اين صورته كه شما دانش خود رو بر مبناي First order logic كه منطقي متفاوت و قوي تر از منطق گزاره اي معموليه به سيستم ميديد و بعد يه سوال از اون مي پرسيد و خودش جواب ميده. مثلا براي يه پايگاه دانش (Knowledge based system) ولي براي بازي ميشه از الگوريتم هاي معمولي مسيريابي و چيزاي ديگه استفاده كرد كه سريع تر و راحت ترند. حالا اگه مي خواستيد يه بازي كند بنويسيد كه يه موجود باهوش با قابليت يادگيري توش بود مي تونيد از prolog استفاده كنيد
لیسپ هم برای برنامه نویسی هوشمند مورد استفاده قرار میگیره و زبانی تابعیه (یعنی برنامه نویسی شی ء گرا شاخه ای از اونه )و مبتدیه (یادگیری آسون) و نسخههای متعددی از اون وجود داره مثل Elisp، Clisp، و Schemeو..
فصل 1 آشنایی با قواعد پرولوگ
فصل 2 برنامه نویسی در پرولوگ
فصل 3 یکتایی و برگشت به عقب(backtacking)
فصل 4 آبجکتهای ساده و مرکب
فصل 5 پردازشهای تکراری و بهینه سازی
فصل 6 لیست ها
فصل 7 بانکهای درونی
فصل 8 عملیات محاسباتی و مقایسه ای
فصل 9 موضوعات پیشرفته
فصل 10 کلاسها و اشیا
فصل 11 خواندن و نوشتن فایلها
فصل 12 هندلینگ رشته
فصل 13 بانکهای اطلاعاتی خارجی
برای نمونه قسمتی از کتاب را در زیر می آورم:
-------------------------------------------------------------------------------------------------------------------------------
برنامه نویسی پرولوگ یک رشته از فعالیت ها نیست بلکه مجموعه ای از واقعیات بنام فاکت با قوانینی برای ترسیم استنتاج از همان فاکت ها،که به آن رول می گویند.
قوانین منطقی،راه ساده ای است برای فهمیدن اینکه،یک دلیل چگونه به وقوع می پیوندد.
پرولوگ برای آسان فهمیدن منطقی ، از یکسری قوانین ساده استفاده می کند ، مشابه زبانهای طبیعی.اگر زبان پرولوگ بتواند زبان انگلیسی را بپذیرد، کامپایلرش نیاز به بررسی بسیاری از حالت ها را خواهد داشت.
پرولوگ از یکسری استنباطهای مهندسی تشکیل شده است که برای پردازش های منطقی،از اطلاعات بهره می برد.
برنامه نویسان پرولوگ ، آبجکت ها و رابطه ها را تعریف می کنند و وقتی رابطه ها صحیح باشند رولها را تعریف می کنند.
در پرولوگ رابطه ما بین آبجکت ها را پریدیکیت می گویند.
کد:
Bill likes Dog
فاکت:
در پرولوگ رابط بین آبجکت ها را پریدیکیت می گویند.در زبان طبیعی اجزاء یک جمله با یکدیگر در ارتباط اند.در زبان ویژوال پرولوگ نیز این ارتباطها بصورت اصول ساده نویسی خاصی وجود دارد.در واقع دانسته های ما در مورد یک چیز را می توانیم فاکت بنامیم.برای مثال bill ،Cindy را دوست دارد.bill وCindy آبجکتها ی ما در زبان پرولوگ هستند.در واقع جمله bill ،Cindy را دوست دارد یک فاکت است.یک فاکت در انتها با یک (.) تمام می شود.
در زبان طبیعی
کد:
Bill likes Cindy
Cindy likes Bill
Bill Likes Dogs
اگر بخواهیم جملات زبان طبیعی بالا را به زبان فابل فهم برای پرولوگ تبدیل کنیم بصورت زیر باید بنویسیم:
کد:
رول :
به قوانینی که شما می توانید از واقعیت های موجود(فاکت ها) استنباطهایی را انجام دهید رول می گویند.
کد:
Cindy likes everything that bill likes.
Caitlin likes everything that is green.
شما بر اساس واقعیت های مثال بالا می توانید استنباط کنید که Cindy و Caitlin چه چیزهایی را دوست دارند.
برای مثال گفته شده است که cindy دوست دارد هر چیزی را که bill دوست دارد،در واقع می توان استنباط نمود که cindy هم به سگ ها علاقه مند است و یا مثال دیگر caitlin هر چیزی را که سبز باشد دوست دارد پس caitlin درختان را نیز دوست دارد.
اگر بخواهیم جملات بالا را به گرامر زبان پرولوگ تبدیل کنیم باید بصورت زیر بنویسیم:
کد:
پرسش ها:
ما پرسش های متفاوتی را از فاکت های داده شده می توانیم بپرسیم،برای مثال می توان پرسید آیا Bill ،Cindy را دوست دارد،در صورتی که بخواهیم این سوال را به زبان پرولوگ تبدیل کنیم باید بصورت زیر بنویسیم:
کد:
likes(bill,cindy).
جوابی که پرولوگ به این پرسش می دهد مثبت است.
پرسش دیگری را در نظر بگیرید،bill چه چیزهایی را دوست دارد، نحوه نوشتن این پرسش در پرولوگ بصورت زیر است:
کد:
likes(bill,What).
در مثال های بالا به استفاده از حروف کوچک و بزرگ دقت کنید.What یک متغیر است.در واقع bill یک ثابت است.متغیر ها همیشه با حروف بزرگ شروع می شوند.
پرولوگ همیشه در پیدا کردن پاسخ به سوالات مطرح شده از ساختار بالا به پایین استفاده می کند.
برای سوال مطرح شدهbill چه چیز هایی را دوست دارد؟
کد:
likes(bill,What)
پاسخ های زیر ارائه خواهد شد.
کد:
What=cindy
What=dogs
2 Solutions
دلیل ارایه شدن این جواب هم در این است که ما صریحا در واقعیت های موجود اعلام کرده ایم که bill ،cindy را دوست دارد و باز صریحا اعلام کرده ایم که bill ،سگ ها را نیز دوست دارد.
حال فرض بگیرید سوالی به این صورت مطرح شود:
Cindy چه چیز هایی را دوست دارد؟
کد:
جوابی که بازگشت داده خواهد شد،True است.در واقع درون Goal این موضوع مطرح شده است که آیا Bill ، بازی بیس بال را دوست دارد که نتیجه True می باشد.
می خواهیم به دقت مثال بالا را بررسی کنیم:
کد:
linkes(tom,baseball).
این فاکت به ما می گوید که tom بازی بیس بال را دوست دارد .
کد:
linkes(bill,Activity):-links(tom,Activity)
این رول به ما می گوید که bill بازیی را که tom دوست دارد،وی نیز دوست دارد.
پس می توان نتیجه گرفت که bill هم بازی بیس بال را دوست دارد.
حال این عبارت را امتحان کنید
کد:
likes(bill, tennis).
جواب ارایه شده به شما بصورت no خواهد بود.چون فاکتی که مبنی بر علاقه مندی bill به بازی تنیس باشد وجود ندارد.گر چه ممکن است شخص bill در زندگی واقعی اش عاشق این بازی باشد ولی چون در مجموعه واقعیت های ارائه شده وجود ندارد،پس پرولوگ نمی تواند چنین استنباطی را انجام دهد.
از زبان طبیعی تا برنامه های پرولوگ
در اولین بخش از این فصل ما در باره واقعیت ها و قوانین و ارتباط بین آنها و همچنین در باره پرسش ها توضیحاتی را ارائه دادیم.تمام این عبارات از زابن طبیعی گرفته شده اند.حال نوبت آن رسیده است که از کلمات خاص زبان پرولوگ استفاده نماییم،بعنوان مثال کلمات clauses,predicate,variables و goal.
در ادامه فصلهای کتاب با کلمات بیشتری آشنا خواهید شد.
Clauses
بطور کلی دو نوع از عبارات اصلی زبان پرولوگ در این بخش ساخته می شوند.در واقع فاکت ها و رول ها دراین بخش ساخته می شوند و می توان گفت که در این بخش شناسایی می شوند. این بخش را می توان قلب زبان برنامه نویسی پرولوگ نامید.
مثال 1:
می خواهیم یک رول بسازیم که منوی غذایی مناسبی را برای شخصی بنام diane انتخاب ارائه کنیم:
Diane غذاهای گیاهی مصرف می کند و فقط غذاهایی را می خورد که دکترش تجویز کرده است.
می خواهیم یک رول از غذاهایی را که diane می تواند انتخاب کند، بسازیم .
برای انتخاب غذای مناسب باید چند فاکتور را در نظر داشته باشیم.
1- غذای انتخاب شده در لیست غذاهای گیاهی است؟
2- غذای انتخاب شده در لیست غذاهایی که دکتر تجویز کرده است،می باشد؟
3- در پایان اگر جواب دوسوال ما مثبت بود،پس diane غذای مورد نظر را می تواند سفارش دهد.
کل مطالب ذکر شده در بالا را در پرولوگ بصورت زیر می توان نوشت:
کد:
به کاما بعد از vegetable(Food_on_menu) توجه نمایید.این کاما عمل و یا همان ترکیب عطفی است.منظور این است که vegetable(Food_on_menu) و on_doctor_list(Food_on_menu) باید صحیح باشند که diane_can_eat(Food_on_menu) بتواند دارای جواب مثبت باشد.
مثال 2:
فرض کنید قصد داریم فاکت صحیحی از والدین ایجاد کنیم .به اصطلاح ساده تر person1 والد person2 باشد.برای این منظور می توانیم بصورت زیر عمل کنیم:
کد:
parent(paul, samantha).
ای ارتباط فقط ارتباط والد و فرزندی را نشان می دهد ولی از ارتباط پدر و یا مادر بودن والد چیزی به میان نیامده است.حال اگر بخواهیم فاکتی برای حالت پدر و فرزند بنویسیم می توانیم بصورت زیر عمل کنیم:
کد:
father(paul, samantha).
مفهوم فاکت بالا این است که paul پدر Samantha است.
اگر بخواهیم ارتباط مادر و فرزند را نشان دهیم می توانیم بصورت زیر عمل کنیم:
mother(julie, samantha).
مفهوم فاکت بالا این است که Julie مادر Samantha است.
نکته ای که در اینجا شاید مهم باشد این است که دیگر نیازی به نوشتن فاکتهای اضافی parent(person1,person2) ندارید.در واقع می توانید این رول را بنویسید که درصورتی Person1 والد person2 است،در صورتی که person1 یا ارتباط پدری و یا ارتباط مادری با Person2 داشته باشد.
کد:
person1 والد person2 است اگر person1 پدر person2 باشد.
person1 والد person2 است اگر person1 مادر person2 باشد.
مثال 3:
شخصی می تواند ماشینی را بخرد،در صورتی که شخص آن ماشین را دوست داشته باشد و آن ماشین هم برای فروش باشد.
تبدیل زبان طبیعی بالا به کد قابل فهم برای زبان پرولوگ بصورت زیر است:
کد:
رول بالا ارتباطهای زیر را نشان می دهد:
. نام انتخابی می تواند یک ماشین را بخرد اگر
. نام انتخابی یک شخص حقیقی باشد و
. مدل ذکر شده هم یک ماشین باشد و
. شخص انتخابی آن مدل را دوست داشته باشد و
. آن مدل هم برای فروش باشد.
رول بالا در صورتی صحیح است که هر چهار شرط آن برقرار باشد.
2.زبان طبیعی زیر را به معادل پرولوگ اش تبدیل کنید:
[code[
a. A person is hungry if that person's stomach is empty.
b. Everybody likes a job if it's fun and it pays well.
c. Sally likes french fries if they're cooked.
d. Everybody owns a car who buys one, pays for it, and keeps it.
[/code]
Predicates (Relations) :
نامهای سمبلیکی از ارتباط ها، پریدیکیت نام دارد.آبجکت هایی که توسط پردیکیت با هم ارتباط بر قرار می کنند،آرگومان نام دارند.اگر فاکت likes(bill,cindy) را در نظر داشته باشیم،likes یک پریدیکیت است و bill و cindy هم آرگومان هستند.
در زیر پریدیکیت های با آرگومان و بدون آرگومان را نمایش داده ایم:
کد:
pred(integer, symbol)
person(last, first, gender)
run
insert_mode
birthday(firstName, lastName, date)
یک پریدیکیت ممکن است هیچ آرگومانی نداشته باشد.استفاده از چنین پریدیکیتهایی محدود است.شما از پرسشهایی نظیر person(rosemont,Name,male) به منظور پیدا کردن نام کوچک آقای resemont استفاده نمایید.اما پریدیکیتهای بدون آرگومان چه استفاده ای می تواند داشته باشد؟شما چه استفاده ای از run در برنامه می توانید بکنید؟موارد استفاده از چنین حالتهایی بسیار کم اتفاق می افتد برای نمونه وقتی که شما می خواهید رفتارهای متفاوتی از وابستگی حالت insert_mode راداشته باشید.در فصل های آتی به مثالهایی در این مورد برخورد خواهیم کرد.
متغیر ها:
متغیر ها در پرولوگ شما را به نوشتن های عمومی ،فاکت ها ،رولها و پرسش ها قادر می سازند.
نام متغیر ها در ویژوال پرولوگ باید با حروف بزرگ شروع شوند یا یک Under Score باشدوبعد از کارکتر حرف بزرگ ابتدایی ، هر کارکتر عددی ، حروف کوچک،بزرگ و یا کارکتر Underline می توان استفاده نمود.
برای مثال:
کد:
My_first_corrent_variable_name
Sales_10_11_86
نمونه های زیر اشتباهند.
کد:
1stattempt
second_attempt
"disaster"
در این پرسش ساده می توانید از متغیر برای پیدا کردن اینکه چه کسی tennis را دوست دارد استفاده نمایید.
کد:
likes(X,tennis)
در این پرسش از علامت X بعنوان متغیر،برای نشان دادن اینکه کسانی را که در حال حاضر tennis را دوست دارند ولی ما نامشان را نمی دانیم، استفاده شده است .
سعی کنید در انتخاب نام متغییر از نامهای متناسب با موضوع استفاده کنید تا خوانایی برنامه شما بالا باشد:
کد:
likes(Person, tennis).
بهتر است از:
کد:
likes(X, tennis).
از این مثال این است که شما عادت کنید بر اساس عبارات و کلمه های بامفهوم جملات خود را بسازید.این کار باعث خوانایی در کد های شما خواهد شد.
با توجه به اینکه در بالا نحوه استفاده از متغیر ها را ذکر کردیم می توانیم عبارت را بصورت زیر تبدیل نماییم:
کد:
likes(bill, Thing):- likes(kim, Thing).
به عبارت زبر دقت کنید
کد:
likes(cindy, Something):- likes(bill, Something).
آبجکت Something یک متغیر است،چون با حروف بزرگ شروع شده است.
بجای استفاده از کلمه Something شما از هر کلمه معتبر برای متغیر می توانید استفاده نمایید.برای مثال کلمه X و یا هرچیز دیگر.
کلمات bill و cindy با حروف بزرگ شروع نشده اند،دلیل این است که این کلمات متغیر نیستند بلکه نمادهایی هستند که ارزش ومقدار ثابتی دارند.این کلمات نیز اختیاری هستند.در صورتی که بخواهید بجای استفاده از حروف کوچک در نمادهای ثابت ،از حروف بزرگ استفاده نمایید،می توانید با گذاشتن کلمه مورد نظر خود در داخل کوتیشن، به کار خود ادامه دهید.البته این کار توصیه نمی گردد.برای مثال “Bill” .
چگونه یک متغیر مقادیرش را می گیرد؟
شما ممکن است به این نکته توجه کرده باشید که پرولوگ ، انتسابی بصورت جمله ای ندارد،فرق اصلی مابین پرولوگ و دیگر زبانهای برنامه نویسی در همین نکته نهفته است.
متغیر ها در پرولوگ مقادیرشان را بوسیله همتا هایشان در ثوابت ،فاکت ها یا رولها ها می گیرند.تا زمانی که هنوز متغیری به یک مقدار مقید نشده ،گفته می شود که متغیر آزاد است.ولی به محض گرفتن مقدار،به آن مقید می شود.اما این مقید بودن برای مدت زمان اجرا(حل)مقید است پس از آن از حالت مقید بودن خارج شده و منتظر مقید شدن های بعدی می ماند.
کد:
بررسی یک پرسش:
چه کسی دوست دارد که هم کتاب بخواند و هم شنا کند.
زبان طبیعی:
کد:
Is there a person who likes both reading and swimming?
پرولوگ:
کد:
likes(Person, reading), likes(Person, swimming).
پرولوگ این دو را بعنوان دو بخش جدا ازهم در برنامه،در نظر می گیرد.ابتدا در صدد حل قسمت اول پرسش بر می آید که با جستجو از بالای برنامه به سمت پایین ،فاکت های موجود در clauses را مورد بررسی قرار می دهد.
کد:
likes(Person, reading)
برای حل پرولوگ از اولین ،فاکت شروع به جستجو می کند
کد:
likes(ellen, reading)
چون هردو در مجموعه قسمت دوم خودشان readingرا دارند،پس با هم مقید می شوند.حال متغیر Personبا مقدار ellen مقید می شود.حال نوبت قسمت دوم می رسد که عبارت likes(Person, swimming). را داراست.
چون این عبارت در ،فاکت های برنامه موجود نیست پس نمی تواند این گزینه شامل جواب ما باشد.در این حالت پرولوگ عمل انقیادی را که به Person انجام داده است پس می گیرد و اشاره گر برنامه را به یک ،فاکت دیگر می دهد تا عمل بررسی را انجام دهد.به این عمل اصطلاحاً برگشت به عقب می گویند.
اگر بصورت عامیانه بخواهیم توضیح دهیم به این صورت است که ابتدا شخصی که به مطالعه علاقه مند است پیدا می کنیم.اولین شخص ellen است.حالا بجای عبارت like(Person,swimming) فرض کنید که بجای Person شخص ellen قرار دارد.باید بدنبال آن باشیم که آیا ellen به شنا علاقه مند است یا خیر.چون در ،فاکت های ما چیزی در این باره وجود ندارد ،مقادیری که قبلا مقید شده اند آزاد می شوند.
باز هم برنامه ادامه می یابد تا گزینه ای دیگر را امتحان کند.برای این کار likes(eric,reading).مورد بررسی قرار می گیرد چون اولین شرط اش را داراست.در اجرای بخش دوم نیزlikes(eric, swimming) مورد بررسی قرار می گیرد که نتیجه آن True می باشد. که جواب بصورت زیر می باشد.
کد:
متغیر های بی نام:
معمولا برای جلوگیری از پیچیدگی برنامه استفاده می شود.اگر ما به یکسری از اطلاعات معین نیاز داشته باشیم ،ما می توانیم برای چشم پوشی از اطلاعاتی که نیاز نداریم از متغیر های بی نام استفاده کنیم.
برای متغیر های بی نام می توان از under score استفاده نمود.از این
متغیر می توان بجای متغیر های دیگر استفاده نمود.
فقط باید به این نکته توجه داشت که به متغیر های بی نام نمی توان مقدار دهی نمود.
مثال:
کد:
در این مثال شما می خواهید ببینید که چه اشخاصی والدین هستند و نیازی به دانستن نام فرزندان آنها ندارید.
کد:
GOAL
parent(Parent, _).
جوابی که پس فرستاده می شود بصورت زیر است.
کد:
Parent=bill
Parent=sue
Parent=joe
3 Solutions
از متغیر بینام می توان در fact ها نیز استفاده نمود.
برای مثال:
کد:
owns(_, shoes).
eats(_).
که منظور عبارت زیر است:
Everyone owns shoes.
Everyone eats.
Goal:
یکی از بخشهای اصلی زبان پرولوگ می باشد.شما میتوانید سوالات خود را به منظور از استنتاج برنامه در این بخش وارد نمایید.
Goal می تواند ساده باشد مانند:
کد:
likes(ellen, swimming).
یا
کد:
likes(bill, What).
یا می تواند شکل پیچیده تری داشته باشد.برای مثال از دوبخش تشکیل شده باشد.
کد:
likes(Person, reading), likes(Person, swimming).
یک Goal که از دو بخش یا بیشتر ساخته می شوند،Goal های ترکیبی گفته می شود(Compound Goal).به هر بخش از Goal های ترکیبی یک Subgoal گفته می شود.بعضی اوقات ما نیاز به اشتراک دو Goal داریم.برای مثال Parent،شاید نیاز داشته باشیم که بدانیم که کدام یک از والدین مرد است که در این صورت از شکل دستوری زیر استفاده می کنیم:
کد:
Goal parent(Person, _), male(Person).
پرولوگ ابتدا سعی می کند که subgoal اولی را انجام دهد که parent(person) است.بعد از جستجو در داخل Clauses و به جواب رسیدن اولین subgoal نوبت به حل قسمت دوم می باشد.
کد:
Male(Person).
در صورت صحیح وارد شدن Goal نتیجه مورد نظر عبارت زیر خواهد بود:
کد:
Person=bill
Person=joe
2 Solutions
Goal های ترکیبی:
شما می توانید از Goal های ترکیبی برای حل هر دو Subgoal A وSubgoal B که True هستند (پیوسته) بوسیله جدا کننده Subgoal ها با کاما(،)استفاده نمایید.و یا می توان از ( برای goal منفصل استفاده نمایید.
به مثال زیر توجه نمایید:
جهت ترکیب subgoal هی می توان از دو کاراکتر (,) و ( استفاده نمود.
کاراکتر کاما معادل استفاده از And در زبانهای برنامه نویسی ویژوال بیسیک و یا زبانهای مشابه است.هنگامی که از کاما استفاده می شود منظور این است که تمام بخشهای subgoal ها باید جواب داشته باشد.
کاراکتر سیمی کالم ( معادل استفاده از Or در زبانهای برنامه نویسی دیگر می باشد. .هنگامی که ازسیمی کالم ا استفاده می شود منظور این است که تنها یکی از بخشهای subgoal ها باید جواب داشته باشد.
به زبان ساده تر می توان بصورت زیر استنباط نمود:
کد:
If condition1=true and condition2= true Then Print
If condition1=true or condition2= true Then Print