פרק 8: cut ושלילה

בחן את עצמך


1. להלן מספר הגדרות למתאר f. שלוש מהן מביעות את התנאי "f מתקיים אם a ו-b מתקיימים או אם a לא מתקיים ו-c מתקיים". איזו הגדרה אינה מביעה תנאי זה?








נתונה הרשימהשימוש ב-! עלול לשנות את המשמעות של התכנית. התייחסו לתכנית הבאה לסיווג תנועות באנגלית:

vtype(V,high_vowel):- V = i ; V = u.
vtype(V,mid_vowel):- V = e ; V = o.
vtype(a,low_vowel).

התכנית מאפשרת לסווג את התנועות לפי גובהן:

?- vtype(e, Type).
Type = mid_vowel
Yes

לגלות אם הנתון אינו מן התנועות:

?- vtype(w, Type).
No

וגם לשאול מהן התנועות מסוג מסוים:

?- vtype(V, mid_vowel).
V = e ;
V = o ;
No

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





3. בהתייחס לגרסא של התכנית המופיעה בסעיף ד' של השאלה הקודמת, על איזו שאילתא משיב פרולוג No?






4. החלפנו את ! בהגדרת p שראינו בשיעור במתאר new_cut המוגדר למטה, וקבלנו תוצאות שונות כאילו לא מתבצע cut. מדוע?

q(X, Y) :- p(X,Y).
q(4,4).

p(X, Y) :- a(X), new_cut, b(Y).
p(3, 3).

a(1).
a(2).
b(1).
b(2).

new_cut :- !.






5. שאילתא שנכשלת מותירה את המשתנים שבה כשהם לא-מאותחלים. כיצד נוכל להשתמש במתאר השלילה \+ כדי לבדוק האם שאילתא מסוימת f(X) תצליח או תיכשל, מבלי לאתחל את המשתנה X?




לא ניתן לבדוק אם שאילתא מצליחה מבלי לאתחל את המשתנים שלה



מבוא

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

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

סיכום

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