نمايش پست تنها
قديمي ۰۶-۱۷-۱۳۸۸, ۰۲:۱۷ بعد از ظهر   #7 (لینک دائم)
Astaraki Female
Administrator
 
آواتار Astaraki
 
تاريخ عضويت: خرداد ۱۳۸۷
محل سكونت: تهران-کرج!
پست ها: 3,465
تشكرها: 754
16,337 تشكر در 3,127 پست
My Mood: Mehrabon
ارسال پيغام Yahoo به Astaraki
Post Visual Prolog Version 5.x

برنامه زیر را در محیط ویژوال پرولوگ نوشته و اجرا نمایید
کد:

PREDICATES
likes(symbol,symbol)
CLAUSES
linkes(elen,tenis).
linkes(john,football).
linkes(tom,baseball).
linkes(eric,swimming).
linkes(mark,tennis).
linkes(bill,Activity):-links(tom,Activity)
GOALS
linkes(bill,baseball).

جوابی که بازگشت داده خواهد شد،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 غذای مورد نظر را می تواند سفارش دهد.
کل مطالب ذکر شده در بالا را در پرولوگ بصورت زیر می توان نوشت:
کد:

diane_can_eat(Food_on_menu):-
vegetable(Food_on_menu),
on_doctor_list(Food_on_menu).

به کاما بعد از 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 داشته باشد.
کد:

parent(Person1, Person2):- father(Person1, Person2).
parent(Person1, Person2):- mother(Person1, Person2).

به عبارت ساده تر:

person1 والد person2 است اگر person1 پدر person2 باشد.
person1 والد person2 است اگر person1 مادر person2 باشد.

مثال 3:
شخصی می تواند ماشینی را بخرد،در صورتی که شخص آن ماشین را دوست داشته باشد و آن ماشین هم برای فروش باشد.
تبدیل زبان طبیعی بالا به کد قابل فهم برای زبان پرولوگ بصورت زیر است:
کد:

can_buy(Name, Model):-
person(Name),
car(Model),
likes(Name, Model),
for_sale(Model).

رول بالا ارتباطهای زیر را نشان می دهد:
. نام انتخابی می تواند یک ماشین را بخرد اگر
. نام انتخابی یک شخص حقیقی باشد و
. مدل ذکر شده هم یک ماشین باشد و
. شخص انتخابی آن مدل را دوست داشته باشد و
. آن مدل هم برای فروش باشد.
رول بالا در صورتی صحیح است که هر چهار شرط آن برقرار باشد.
Astaraki آفلاين است   پاسخ با نقل قول
از Astaraki تشكر كرده اند:
mi na (۰۲-۱۷-۱۳۹۱), nasersalehiazar (۰۸-۲۵-۱۳۸۹)