פרולוג/תרגיל מסכם: סבא של עצמי
מראה
< פרולוג
"אני סבא של עצמי"
[עריכה]קראו את השיר "אני סבא של עצמי":
- מקור (אנגלית)
- תרגום מאת יוחאי לבנון (ע"מ 6)
עצות
[עריכה]- לא כדאי להמציא שמות כי זה יהיה סתם מבלבל.
- את כל העובדות כדאי לכתוב יחסית לדובר, כלומר:
אב(אני,בני).
אם(אשתי,בת_אשתי).
חלק א
[עריכה]- כתבו את כל העובדות הפשוטות נוסח "אב/2", "אם/2".
- כתוב את כל הצירופים של הזוגות הנשואים עם "נשואים/2".
חלק ב
[עריכה]בהתאם למתואר בשיר, הגדירו את החוקים הבאים:
- אב_חורג/2
- אם_חורגת/2
- הורה/2
- הורה_חורג/2
חלק ג
[עריכה]התחשבו בהורים חורגים והגדירו את החוקים:
- אחים/2
- אחים_חורגים/2
השתמשו ב"נשואים/2" על מנת לכתוב את החוקים:
- חותן/2
- חותן_חורג/2
- דוד/2
- דוד_חורג/2
חלק ד (ואחרון)
[עריכה]הגדירו את החוקים:
- סבתא/2
- סבתא_חורגת/2
- סבא_חורג/2
הרצה
[עריכה]אם הגדרתם הכל כהלכה, אמור להתקבל פלט מהצורה:
?- סבא_חורג(אני,אני). Yes ?- סבא_חורג(_סבא,_נכד). _סבא = 'אני', _נכד = 'אני' ; _סבא = 'אבי', _נכד = 'בני' ; _סבא = 'אבי', _נכד = 'בת_אשתי' ; No
שימו לב: האמת, שבפלט מופיעות הרבה חזרות שהשומטו כאן. |
פתרון
[עריכה]פתרון
לא(X):- not(X). אם(אשתי,בת_אשתי). אם(אשתי,בני). אב(אבי,אני). אב(אני,בני). נשואים(אני,אשתי). נשואים(אבי,בת_אשתי). %נשואים(X,Y):-נשואים(Y,X),!. נשואים(אני,אשתי). נשואים(אבי,בת_אשתי). אב_חורג(_אב_חורג,_בן_חורג):- אם(_אם,_בן_חורג), נשואים(_אב_חורג,_אם), לא(אב(_אב_חורג,_בן_חורג)). אם_חורגת(_אם_חורגת,_בן_חורג):- אב(_אב,_בן_חורג), נשואים(_אב,_אם_חורגת), לא(אם(_אם_חורגת,_בן_חורג)). חותן(_חותן,_מחותן):- נשואים(_מחותן,_בן_הזוג), הורה(_חותן,_בן_הזוג). חותן_חורג(_חותן,_מחותן):- נשואים(_מחותן,_בן_הזוג), הורה_חורג(_חותן,_בן_הזוג). הורה(_הורה,_ילד):- אב(_הורה,_ילד); אם(_הורה,_ילד). הורה_חורג(_הורה,_ילד):- (אב_חורג(_הורה,_ילד); אם_חורגת(_הורה,_ילד)), לא(הורה(_הורה,_ילד)). אחים(_אח1,_אח2):- אב(_אב,_אח1), אם(_אם,_אח1), אב(_אב,_אח2), אם(_אם,_אח2), _אח1\=_אח2. אחים_חורגים(_אח1,_אח2):- הורה(_הורה,_אח1), הורה(_הורה,_אח2), _אח1\=_אח2. דוד(_דוד,_אחיין):- הורה(_הורה,_אחיין), אחים(_הורה,_דוד). דוד_חורג(_דוד,_אחיין):- (הורה(_הורה,_אחיין), אחים_חורגים(_הורה,_דוד)); (הורה_חורג(_הורה,_אחיין), אחים(_הורה,_דוד)); (הורה_חורג(_הורה,_אחיין), אחים_חורגים(_הורה,_דוד)). סבתא(_סבתא,_נכד):- אם(_סבתא,_הורה), הורה(_הורה,_נכד). סבתא_חורגת(_סבתא,_נכד):- (אם(_סבתא,_הורה), הורה_חורג(_הורה,_נכד)); (אם_חורגת(_סבתא,_הורה), הורה(_הורה,_נכד)); (אם_חורגת(_סבתא,_הורה), הורה_חורג(_הורה,_נכד)). סבא_חורג(_סבא,_נכד):- סבתא_חורגת(_סבתא,_נכד), נשואים(_סבא,_סבתא).