פרק 1: אבני הבניין

1.3 חוקים ושאילתות

חוק הוא הדרך שבה מייצגים בפרולוג טענות אימוז.
התכנית הבאה מכילה עובדות וגם חוקים:

no_guard(tuesday).
no_test(wednesday).
run_away(tuesday) :- no_guard(tuesday).
run_away(tuesday) :- no_test(wednesday).
be_punished(wednesday) :- run_away(tuesday).
ביום שלישי אין שומר - וזו עובדה!
כך נראה חוק:
מצד שמאל ראש החוק, ומצד ימין גוף החוק.
שימו לב לקוד האינטראקטיבי.

נוסף על העובדות שנכונות בתחום הדיון, אנו מציינים גם שלושה חוקים שמתקיימים בו.

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

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

גוף -: ראש

גוף --> ראש

משמעות החוק היא: אם גוף החוק נכון, אז גם ראשו נכון.

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

?- be_punished(wednesday).
Yes

פרולוג מפעיל את כלל ההיסק מודוס פוננס על מנת להסיק את המסקנה.

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

party(tuesday) :-
no_homework(tuesday),
no_test(wednesday).

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

אם נשאל את פרולוג:

?- party(tuesday).

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

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

party(tuesday) :-
no_homework(tuesday);
no_test(wednesday).

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

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

?- party(tuesday).

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


התבוננו בשני החוקים האחרונים שהצגנו. מבחינה חיצונית הם נראים כמעט זהים! על מנת להקל על הקריאות של תכניות פרולוג נוהגים מתכנתים רבים להשתמש בכתיב חלופי כדי להביע איווי בתוך חוקים. גם אנו ננקוט בשיטה זו, המכונה "חוקים חלופיים":
שימו לב שבתכנית שהצגנו בתחילת הסעיף יש שני חוקים עם ראש זהה – run_away(tuesday). משני החוקים אנו למדים שבורחים ביום שלישי אם אין שומר ביום שלישי, או אם אין מבחן ביום רביעי. כלומר, רישום מספר חוקים עם אותו ראש היא דרך להביע איווי.

מבוא

נושאים בסיסיים

נושאים מתקדמים

סיכום

© כל הזכויות שמורות למערכת המידע איתן