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

حال به عبارت زیر توجه نمایید:
کد:

Bill likes the same thing as Kim.

با توجه به اینکه در بالا نحوه استفاده از متغیر ها را ذکر کردیم می توانیم عبارت را بصورت زیر تبدیل نماییم:
کد:

likes(bill, Thing):- likes(kim, Thing).

به عبارت زبر دقت کنید
کد:

likes(cindy, Something):- likes(bill, Something).

آبجکت Something یک متغیر است،چون با حروف بزرگ شروع شده است.
بجای استفاده از کلمه Something شما از هر کلمه معتبر برای متغیر می توانید استفاده نمایید.برای مثال کلمه X و یا هرچیز دیگر.
کلمات bill و cindy با حروف بزرگ شروع نشده اند،دلیل این است که این کلمات متغیر نیستند بلکه نمادهایی هستند که ارزش ومقدار ثابتی دارند.این کلمات نیز اختیاری هستند.در صورتی که بخواهید بجای استفاده از حروف کوچک در نمادهای ثابت ،از حروف بزرگ استفاده نمایید،می توانید با گذاشتن کلمه مورد نظر خود در داخل کوتیشن، به کار خود ادامه دهید.البته این کار توصیه نمی گردد.برای مثال “Bill” .

چگونه یک متغیر مقادیرش را می گیرد؟
شما ممکن است به این نکته توجه کرده باشید که پرولوگ ، انتسابی بصورت جمله ای ندارد،فرق اصلی مابین پرولوگ و دیگر زبانهای برنامه نویسی در همین نکته نهفته است.
متغیر ها در پرولوگ مقادیرشان را بوسیله همتا هایشان در ثوابت ،فاکت ها یا رولها ها می گیرند.تا زمانی که هنوز متغیری به یک مقدار مقید نشده ،گفته می شود که متغیر آزاد است.ولی به محض گرفتن مقدار،به آن مقید می شود.اما این مقید بودن برای مدت زمان اجرا(حل)مقید است پس از آن از حالت مقید بودن خارج شده و منتظر مقید شدن های بعدی می ماند.
کد:

PREDICATES
likes(symbol,symbol)
CLAUSES
likes(ellen,reading).
likes(john,computers).
likes(john,badminton).
likes(leonard,badminton).
likes(eric,swimming).
likes(eric,reading).

بررسی یک پرسش:
چه کسی دوست دارد که هم کتاب بخواند و هم شنا کند.
زبان طبیعی:
کد:

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 می باشد. که جواب بصورت زیر می باشد.
کد:

Person=eric
1 Solution
Astaraki آفلاين است   پاسخ با نقل قول
از Astaraki تشكر كرده است:
mi na (۰۲-۱۷-۱۳۹۱)