קובץ מספר 2 - מלוגיקה לפרולוג
Transcription
קובץ מספר 2 - מלוגיקה לפרולוג
1 שפות תכנות שפות תכנות מתחלקות לשפות הצהרתיות (דקלרטיביות) ולשפות תהליכיות (פרוצדורליות). בשפות תהליכיות נותנים מעין מתכון לפתרון הבעיה, כלומר מפרטים את התהליך לפתרון הבעיה. בשפות הצהרתיות מנסחים בעזרת חוקי התחביר של השפה את הבעיה שיש לפתור ,כלומר מצהירים מהי הבעיה. 2 לסרטון פרולוג שפת פרולוג הינה שפה לתכנות לוגי ProLog: PROgrammation en LOGique פותחה בשנות השבעים של המאה העשרים על ידי קבוצות חוקרים בבריטניה ובצרפת .פרולוג הפכה לכלי יעיל לפיתוח יישומים לאחר שנכתב לה מהדר (קומפיילר) יעיל .מאז נכתבו בעזרתה יישומים שונים לתחומים רבים ,בראשם בינה מלאכותית ועיבוד שפה טבעית. פרולוג ,בהיותה שפת תכנות לוגי ,מתאפיינת בכך שהיא עושה שימוש בלוגיקה הקלאסית להצרין מידע ולייצג בעיות, ומשתמשת במנגנון הוכחה לוגי כדי לפתור בעיות. 3 סביבת העבודה קיימים מספר יישומי פרולוג .אנו נעבוד בסביבת !Amzi מערכת פיתוח תואמת סטנדרט Edinburgh המאפשרת לשלב קוד פרולוג במסגרת ,++C ,C ויז'ואל בייסיק ,דלפי ,אקסס וכלים אחרים של חלונות. סביבה זו הותאמה לכתיבה בעברית ,והוספה לה מערכת גרפית. 4 באתר קבוצת מדעי המחשב במחלקה להוראת המדעים במכון ויצמן ,קיימים חומרים רלבנטיים: http://stwww.weizmann.ac.il/g-cs/ פרולוג עברי בסביבת חלונות: יש להוריד את חוברת ההדרכה ואת הוראות ההתקנה. 5 שפת פרולוג -תחביר ביטויים בפרולוג ביטויים פשוטים קבועים אטומים 6 ביטויים מורכבים משתנים מספרים אטום מחרוזת רצופה של תווים שמתחילה באות עברית (או קטנה באנגלית) וכוללת אותיות ,ספרות ,קו תחתון. דוגמאות :ביצה ,ביצה_רכה ,ביצהharry_potter, ,2 .harryPotter, harryPotter2 כל רצף תווים שמוקף בגרשיים בודדים. דוגמאות' :ביצה רכה' רצף של תווים מיוחדים .אטומים אלה לרוב נושאים משמעות מוגדרת .דוגמאות.; ,-: ,=@= : 7 משתנה מחרוזת של תווים שמתחילה בקו תחתון (או באות גדולה באנגלית) וכוללת אותיות ,ספרות ,קו תחתון. דוגמאות_ :שם_ ,שם_משפחה_ ,ילדName ,X ,2 שימו לב לדמיון התחבירי בין אטומים למשתנים :ניתן להבחין ביניהם רק על סמך התו הראשון. קו תחתון בודד (_) הוא משתנה מיוחד ,וניפגש בו בהמשך. לרשום במחברת – חוק דפנה מס' 1 אין לכתוב משתנים באנגלית! 8 ביטוי מורכב ביטויים אלה כשמם כן הם ,מורכבים מאטומים ,מספרים ומשתנים .הם בנויים ממתאר ( )functorשאחריו רצף של מתוארים ( )argumentsבתוך סוגריים, מופרדים בפסיקים .המתאר חייב להיות אטום .המתוארים יכולים להיות כל ביטוי שהוא: דוגמאות: אין רווח בין תלמיד(יוסי,כהן). המתאר תלמיד(יוסי,בר_מוחא,י.)3, לסוגריים הורה(אברהם,יצחק). הורה(יעקב_,מי). זוג(שם(משה,לוי),שם(סימה,בר_יעקב)). חשוב לדעת שהמאפיינים הבסיסיים של ביטוי מורכב הם המתאר שלו ומספר המתוארים שלו .לכן ,שני ביטויים מורכבים שיש להם אותו מתאר ,אבל מספר מתוארים שונה ,נחשבים בפרולוג ביטויים שונים לגמרי .נסמן ביטויים מורכבים כדלקמן :שם המתאר ,קו נטוי ,ואחריו מספר המתוארים. הביטויים המורכבים שהצגנו בדוגמא האחרונה יתוארו כך: תלמיד ,2/תלמיד ,4/הורה,2/זוג.2/ 9 ביטוי מורכב .1 מספר המתוארים בתוך הסוגריים אינו מוגבל. .2 הסדר שבחרנו להביע בו את המתוארים הוא משמעותי. לכן כשאנו כותבים תוכנית ,נרשום הערת תיעוד מתאימה לכל ביטוי מורכב: %הורים(_אבא_ ,אמא_ ,בן). הורים(אברהם ,שרה ,יצחק). הורים(יצחק ,רבקה ,יעקב). הורים(יעקב ,רחל ,בנימין). %אוהב(_מי_אוהב_,מה_אוהב). אוהב(רחל ,גלידה). אוהב(שמעון ,לעשות_חיים). 10 שפת פרולוג שפת פרולוג תוכנית פרולוג עובדות 11 שאילתות חוקים עובדות עובדות הן פיסות מידע שיש לנו על תחום דיון מסוים. לרשום במחברת – חוק דפנה מס' 2 כל עובדה נכתבת בשורה חדשה. עובדה מסתיימת בנקודה. לדוגמא: ירח. בלון. %ילד(_שם_,משפחה). ילד(משה,לוי). לרשום במחברת – חוק דפנה מס' 3 ילד(סיגל,כהן). עובדות בעלות מתאר משותף נכתבות ברצף ,זו אחר זו, כשלפניהן רשומה הערה :שם המתאר ,ומה כל אחד מהמתוארים. 12 שאילתות ירח. בלון. ילד(משה,לוי). ילד(סיגל,כהן). 13 זו תוכנית הפרולוג הראשונה שלנו .לגביה ,אנו יכולים לשאול שאלות: ? -ירח. כן. ילד(משה,לוי). כן. שאילתות פרולוג עונה לנו בעצם על השאלה "האם ניתן להסיק את המידע בשאילתא מתוך הידוע בתכנית?" .לכן ,אם בשאילתא יופיע מתאר לא מוכר או מתואר לא מוכר, פרולוג יענה "לא" ,פשוט משום שאין ביכולתו להסיק את נכונות המידע: ירח. בלון. ילד(משה,לוי). ילד(סיגל,כהן). אחים(יעקב,עשו). ?-שמש. לא. ?-ילד(סיגל,לוי). לא. ?-אחים(עשו,יעקב). לא. 14 שפת פרולוג – קשרים לוגיים קשר הגימום (וגם) מסומן בפרולוג באמצעות פסיק. קשר האיווי (או) מסומן בפרולוג באמצעות נקודה פסיק. האם יש תפוז וגם לימון? ? -תפוז ,לימון. כן. 15 נתונה תכנית פרולוג: תפוז. לימון. שפת פרולוג – קשרים לוגיים קשר הגימום (וגם) מסומן בפרולוג באמצעות פסיק. קשר האיווי (או) מסומן בפרולוג באמצעות נקודה פסיק. האם יש תפוז וגם אבוקדו? ? -תפוז ,אבוקדו. לא. 16 נתונה תכנית פרולוג: תפוז. לימון. שפת פרולוג – קשרים לוגיים קשר הגימום (וגם) מסומן בפרולוג באמצעות פסיק. קשר האיווי (או) מסומן בפרולוג באמצעות נקודה פסיק. האם יש תפוז או אבוקדו? ? -תפוז; אבוקדו. כן. 17 נתונה תכנית פרולוג: תפוז. לימון. שפת פרולוג – קשרים לוגיים קשר הגימום (וגם) מסומן בפרולוג באמצעות פסיק. קשר האיווי (או) מסומן בפרולוג באמצעות נקודה פסיק. האם יש תפוז או לימון? ? -תפוז; לימון. כן. 18 נתונה תכנית פרולוג: תפוז. לימון. שפת פרולוג – קשרים לוגיים נתונות תשובות הפרולוג לשאילתות: ?- ?- ?- ?- ?- ?- ירוק;ורוד. אדום;ירוק. צהוב ,לבן. סגול ,צהוב. כתום; אדום. כתום ,חום. כן. לא. כן. לא. כן. לא. מהן העובדות שיש בתוכנית הפרולוג? 19 משתנים בשאילתות נתונה תכנית פרולוג: % כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). 20 משתנים בשאילתות האם קיימת מישהי שהיא כבש? ? -כבש (_מי). לא. נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). פרולוג לא מבין עברית! פרולוג בודק התאמה באטומים! נקבל ערך למשתנה אך ורק אם השאילתה מצליחה! 21 משתנים בשאילתות האם קיימת מישהי שהיא כבשה? ? -כבשה (_מי). _מי=דולי >- על מנת לקבל תשובות נוספות ,נקיש על כל מקש לבד מ- :enter _מי=מולי ;>- _מי=בולי;>- לא. 22 תשובה נוספת כאשר מבקשים תשובה נוספת: הפרולוג מכשיל את התשובה הקודמת ,וממשיך לחפש מאותו מקום בו היה בתוכנית! ? -כבשה(_מי). 23 נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). תשובה נוספת כאשר מבקשים תשובה נוספת: הפרולוג מכשיל את התשובה הקודמת ,וממשיך לחפש מאותו מקום בו היה בתוכנית! ? -כבשה(_מי). _מי=דולי 24 נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). תשובה נוספת כאשר מבקשים תשובה נוספת: הפרולוג מכשיל את התשובה הקודמת ,וממשיך לחפש מאותו מקום בו היה בתוכנית! ? -כבשה(_מי). _מי=דולי (הקשת מקש) (הפרולוג מכשיל את התשובה הקודמת וממשיך לחפש מאותו מקום) _מי=מולי 25 נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). משתנים בשאילתות משתנה בפרולוג: * מתייחס אל מתואר בפרולוג. * מחזיר את ערך המתואר במיקום המתאים. * אם יש כמה מתוארים מתאימים ,ניתן לבקש תשובות נוספות. שאלה בלי משתנה :האם יש בתוכנית: ?-שמש. 26 האם יש "שמש" בתוכנית. משתנים בשאילתות משתנה בפרולוג: * מתייחס אל מתואר בפרולוג. * מחזיר את ערך המתואר במיקום המתאים. * אם יש כמה מתוארים מתאימים ,ניתן לבקש תשובות נוספות. שאלה עם משתנה :האם יש בתוכנית ,ואם יש מי/מה זה? ?-ילד(_מי). האם יש "ילד" בתוכנית ,ואם כן ,מיהו? במילים אחרות – האם יש מתואר מתאים בתוכנית ,ואם כן ,מה ערכו? 27 משתנים בשאילתות האם קיימים כבשה וגם עכבר? ? -כבשה (_מי_כבשה( ,עכבר(_מי_עכבר). _מי_כבשה=דולי _מי_עכבר=נבוכדנאצר;>- _מי_כבשה=דולי _מי_עכבר=זרובבל;>- _מי_כבשה=מולי _מי_עכבר=נבוכדנאצר;>- _מי_כבשה=מולי _מי_עכבר=זרובבל;>- לא. 28 נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). משתנים בשאילתות האם קיימים כבשה או עכבר? ? -כבשה (_מי_כבשה) ; עכבר(_מי_עכבר). _מי_כבשה=דולי; _מי_כבשה=מולי; _מי_עכבר=נבוכדנאצר;>- _מי_עכבר=זרובבל;>- לא. 29 נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). משתנים בשאילתות מה המשמעות של: ?-כבשה(_מי),עכבר(_מי). שימוש באותו משתנה משמעותו – המשתנה חייב להיות בעל אותו ערך. כמו באלגברה: X2-3X-4=0 ל X-אותו ערך בכל מופע שלו במשוואה זו. 30 משתנים בשאילתות מה המשמעות של: ?-כבשה(_מי),עכבר(_מי). הפרולוג בודק אטום אחרי אטום. התחילה הוא בודק "כבשה(_מי)" המשתנה _מי מקבל ערך "דולי" לאחר שהצליח ,עובר הלאה, ועכשיו בודק "עכבר(דולי)" המשתנה _מי קיבל כבר ערך ,והוא "דולי" 31 נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). משתנים בשאילתות ?-תלמיד(_שם_,משפחה ,)1תלמידה(_שם_,משפחה.)2 _שם=רוני _משפחה=1לוי _משפחה=2מימון ; לא. 32 נתונה תכנית פרולוג: %תלמיד(_פרטי_,משפחה). תלמיד(רוני,לוי). תלמיד(משה,לוי). %תלמידה(_פרטי_,משפחה). תלמידה(רוני,מימון). משתנים בשאילתות האם מותר לשאול באותה הרצת מחשב: ?-כבשה(_מי). _מי=דולי... מותר! ?-עכבר(_מי). כמו באלגברה: X2-3X-4=0 לא שולל ערך אחר של Xבתרגיל אחר: 8X=-80 ל X-אותו ערך בכל מופע שלו באותה שאילתה, אך שאילתה חדשה היא כמו תרגיל חדש במתמטיקה. 33 משתנים כיצד נבקש שתי כבשים מהתוכנית? ?-כבשה(_שם,)1כבשה(_שם.)2 _שם=1דולי _שם=2דולי כשיש לפרולוג מטרה מורכבת (במקרה הנ"ל שתי מטרות קשורות בקשר גימום) הוא מבצע מטרה אחת ,וכשמצליח בה הוא מתחיל לבצע את המטרה החדשה מתחילת התוכנית! 34 נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). משתנים כיצד נבקש שתי כבשים מהתוכנית? ?-כבשה(_שם,)1כבשה(_שם.)2 _שם=1דולי _שם=2דולי כמו באלגברה – משתנים שונים יכולים להיות בעלי אותו ערך 2X+3Y=5 אחת התשובות היאX=1,Y=1 : על מנת להכריח את הפרולוג למצוא ערכים שונים למשתנים נשתמש בסימן "שונה" 35 נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). \= משתנים כיצד נבקש שתי כבשים מהתוכנית? ?-כבשה(_שם,)1כבשה(_שם_ ,)2שם_ =\ 1שם.2 _שם=1דולי _שם=2מולי; _שם=1דולי _שם=2בולי; _שם=1מולי _שם=2דולי; _שם=1מולי נתונה תכנית פרולוג: %כבשה(_מי_הכבשה). כבשה(דולי). כבשה(מולי). כבשה(בולי). %עכבר(_מי_העכבר). עכבר(נבוכדנאצר). עכבר(זרובבל). _שם=2בולי; _שם=1בולי _שם=2דולי; _שם=1בולי _שם=2מולי; 36 לא. \= משתנה חסר זהות (משתנה אנונימי) נתונה תכנית פרולוג: %סרט )_שם_סרט_ ,שם_קולנוע_ ,משעה_ ,עד_שעה_ ,מחיר_כרטיס(. סרט )אשה_יפה ,חן. (12,9,7 , סרט )רמבו ,גן_.(23, 8, 5, 3 סרט )רמבו ,כוכב.(9, 8, 6 , סרט )צלילי_המוסיקה ,אור_.(5, 7, 2, 4 סרט )צלילי_המוסיקה ,אור_גן_.(26, 5, 4, 6 סרט )עשיר_ועני ,חן.(9, 11, 8 , סרט )בת_הים_הקטנה ,פארק.(25, 12, 10 , סרט )פיטר_פן ,דור.(30, 14, 12 , סרט )אהבה_ומלחמה ,לב.(50, 11, 9 , סרט )ים_המוות ,אורגיל.(76, 5, 4 , כיצד נשאל אילו סרטים יש במסד הידע? 37 משתנה חסר זהות (משתנה אנונימי) נתונה תכנית פרולוג: %סרט )_שם_סרט_ ,שם_קולנוע_ ,משעה_ ,עד_שעה_ ,מחיר_כרטיס(. . ( 7 , 9 , 12 , ,חן סרט )אשה_יפה .( 23 , 8 , 5 , ,גן_3 סרט )רמבו .( 9 , 8 , 6 , ,כוכב סרט )רמבו סרט )צלילי_המוסיקה ,אור_.( 5 , 7 , 2 , 4 סרט )צלילי_המוסיקה ,אור_גן_.( 26 , 5 , 4 , 6 .( 9 , 11 , 8 , ,חן סרט )עשיר_ועני .( 25 , 12 , 10 , סרט )בת_הים_הקטנה ,פארק .( 30 , 14 , 12 , ,דור סרט )פיטר_פן .( 50 , 11 , 9 , סרט )אהבה_ומלחמה ,לב ,אורגיל .( 6 , 5 , 4 , סרט )ים_המוות כיצד נשאל אילו סרטים יש במסד הידע? 38 משתנה חסר זהות (משתנה אנונימי) נתונה תכנית פרולוג: %סרט )_שם_סרט_ ,שם_קולנוע_ ,משעה_ ,עד_שעה_ ,מחיר_כרטיס(. סרט )אשה_יפה ,חן. (12,9,7 , סרט )רמבו ,גן_.(23, 8, 5, 3 סרט )רמבו ,כוכב.(9, 8, 6 , סרט )צלילי_המוסיקה ,אור_.(5, 7, 2, 4 סרט )צלילי_המוסיקה ,אור_גן_.(26, 5, 4, 6 סרט )עשיר_ועני ,חן.(9, 11, 8 , סרט )בת_הים_הקטנה ,פארק.(25, 12, 10 , סרט )פיטר_פן ,דור.(30, 14, 12 , סרט )אהבה_ומלחמה ,לב.(50, 11, 9 , סרט )ים_המוות ,אורגיל.(76, 5, 4 , %סרט )_שם_סרט_ ,שם_קולנוע_ ,משעה_ ,עד_שעה_ ,מחיר_כרטיס(. 39 משתנה חסר זהות (משתנה אנונימי) %סרט )_שם_סרט_ ,שם_קולנוע_ ,משעה_ ,עד_שעה_ ,מחיר_כרטיס(. האם מעניין אותנו שם הקולנוע? האם מעניינות אותנו השעות? האם מעניין אותנו המחיר? לא ולא! אם נשאל -? :סרט(_שם). נקבל תשובה -לא. לשם כך קיים משתנה חסר זהות – משמעותו – יש מתואר ,אך ערכו אינו מעניין אותנו: ?-סרט(_שם.)_,_,_,_, _שם= אישה_יפה ; 40 %עובדות %אוהב(_מי_אוהב_,את_מי_אוהב). אוהב (דוד ,יהונתן). משמעות שאילתות .1האם דוד אוהב את יהונתן? ?-אוהב (דוד ,יהונתן). כן. .2האם יהונתן אוהב מישהו? ?-אוהב (יהונתן.) _ , לא. .3האם קיים מישהו שדוד אוהב ,ומי הוא? ?-אוהב (דוד_ ,את_מי_אוהב). _את_מי_אוהב = יהונתן;>- לא. .4האם קיים מישהו שאוהב את יהונתן ומי הוא? ?-אוהב (_מי_אוהב ,יהונתן). _מי_אוהב = דוד;>- לא. .5האם יש שניים שאחד אוהב את השני ומי הם? ?-אוהב (_מי_אוהב ,את_מי_אוהב). _מי_אוהב = דוד _את_מי_אוהב = יהונתן;>- לא. .6האם קיים מישהו שאוהב את עצמו? ?-אוהב (_מי_,מי). לא. 41 שמות משתנים מבחינת הפרולוג ניתן לבחור שמות משתנים שהם בעלי משמעות או כאלה שאינם בעלי משמעות (כגון (Y,Xדפנה לא מרשה!)_,א_,ב) ,אך שמות בעלי משמעות מקלים הן על הבנת התכנית ותחזוקתה והן על הבנת התשובות. קוראים לי X קוראים לי _מי_חתן 42