שאלה פשוטה בפרולוג - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלה פשוטה בפרולוג


redead

Recommended Posts

יש לי את הקוד הפשוט הבא :



hobbit(sam).
hairy_feet(bilbo).
loves_food(frodo).
hairy_toes(frodo).

hobbit(X) :- hairy_feet(X), loves_food(X).
hairy_feet(X) :- hairy_toes(X)

עכשיו אני רוצה להבין בבקשה את התהליך שמתבצע בכל אחד מהשאילתות הבאות בבקשה:

hobbit(bilbo)

hobbit(sam)

hobbit(frodo)

hobbit(X)

תודה רבה..

קישור לתוכן
שתף באתרים אחרים

המנגנון של פרולוג מנסה "להוכיח" את הפונקציות שכתבת ולהחזיר לך תשובה.

הוביט(בילבו) -

יש "הוביט(משהו)" - המנגנון יבדוק האם זה "הוביט(בילבו)" - לא. זה "הוביט(סאם)".

יש עוד "הוביט(משהו) - בודק:

יקרא ל - רגלים_שעירות(בילבו).

מכיוון שאין נתון כזה "רגלים_שעירות(בילבו)" הוא יכשל.

הפסיק בפרולוג עובד כמו AND בשפות תכנות אחרות. לכן אין טעם לבדוק את שאר התוכנית והמנגנון יחזיר כישלון לקריאה "הוביט(בילבו)".

אתה תראה על המסך "לא".

בדומה - 2 השאילתות הבאות.

הרביעית -

תחזיר את כל מה שהוא הוביט ע"פ הגדרותיך. (יש כפתור לקבלת תשובות נוספות לא זוכר מהו).

1- סאם. - החזיר את זה כי זה כתוב בנתונים

תשובות נוספות:

2- מנסה להוכיח את החוק הוביט:

רגליים שעירות > מחזיר בילבו.

בודק אוהב_מזון(בילבו) > לא קיים > נכשל.

חוזר לבקש תשובה אחרת מרגלים_שעירות(X) > כניסה לפונקציה רגלים_שעירות(X) > פרודו יוחזר.

בודק אוהב_מזון(פרודו) > הצליח > אין עוד המשך > לכן פרודו הוא גם תשובה טובה > מחזיר פרודו.

על המסך תראה: פרודו.

תשובות נוספות:

3- לא (כי אין עוד דרך למצוא עוד הוביטים).

אתה לומד פרולוג באוניברסיטה או תיכון ?

קישור לתוכן
שתף באתרים אחרים

האמת שזו אחת השפות האהובות עלי... עשיתי בה דברים מדהימים.

פשוט שכח את מה שאתה יודע על תכנות, ותחשוב כמו המנגנון... לנסות להוכיח את הכלל ע"י הצבות, ולהתקדם... אם אי אפשר - לחזור שלב אחורה ולראות אם אפשר להציב משהו אחר ולהתקדם...

המפתח (ומה שקשה בדרך כלל לאנשים עם רקע בתכנות) זה פשוט לחשוב על הכל ברקורסיה...

בהצלחה.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...