תכנות הצהרתי: עובדות, כללים ומטרות
הוצג| English | משמעות |
|---|---|
| fact/fækt/ | עובדה |
| declarative programming/dɪˈklærətɪv ˈprəʊɡræmɪŋ/ | תכנות הצהרתי |
| rule/ruːl/ | חוק |
| goal/ɡəʊl/ | מטרה |
| backtrack/ˈbæktræk/ | מעבר אחורי |
| unification/ˌjuːnɪfɪˈkeɪʃn/ | איחוד |
שאלו מי יכול להשאיל מצלמה
- מועדון מדיה שומר עובדות על חבריו ועל הכשרות שהושלמו. הוא רוצה לשאול מי יכול להשאיל מצלמה מבלי לכתוב לולאה חדשה לכל שאלה.
- תכנות הכרזתי מתאר עובדות, כללים ומטרה. מנוע לוגיקחי מחפש ערכים הופכים את המטרה לאמת. התוכנת עדיין חייב לכתוב כללים נכונים; המנוע אינו קורא מחשבות או לוחות הודעות של המועדון.
עובדות מציגות מה ידוע
- עובדה היא הצהרה במאגר הידע. ב
member(aya)., הפריקטmemberמקשר אדם אחד לחברות במועדון.trained(aya, camera).מקשר אדם לסוג ציוד. - שיעור זה משתמש בסימון בסגנון Prolog: שמות קטנים הם קבועים או פריקטים; שמות גדולים הם משתנים. נקודה סוללת מסתיימת כל עובדה או כלל.
member(aya).
member(ben).
member(chen).
trained(aya, camera).
trained(chen, camera).
trained(ben, audio).
עבור העובדות member(ben). ו trained(ben, audio)., איזה מהביטויים הבאים הוא עובת מסופקת?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
member(ben). נתונה ישירות. בסיס המידע אינו כולל אימון מצלמה לבן.
כלל מאחד תנאים
- כלל קובע מתי מסקנה תקפה. קראו ל
:-כ"אם" ולפסוקה כAND: אדם יכול להשאיל מצלמה אם הוא חבר וגם יש לו הכשרת מצלמה. Personמכנה אותו משתנה בשלושת המקומות. המנוע חייב למצוא ערך אחד שעונה לשני התנאים, ולא חבר אחד ואדם אחר מוכשר.
can_borrow(Person, camera) :- member(Person), trained(Person, camera).
בכלל can_borrow(Person, camera) :- member(Person), trained(Person, camera)., הפסיקה בין התנאים משמעות ____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
גם חברות וגם אימון במצלמה חייבים להתקיים עבור אותה אדם.
מטרה שואלת שאלה
- המטרה
?- can_borrow(aya, camera).שואלת לתוצאת כן/לא. המנוע מתאים את הכלל ובדוקmember(aya)וtrained(aya, camera): שתי העובדות קיימות, לכן המטרה מצליחה. - המטרה
?- can_borrow(Person, camera).שואלת לקישורים של המשתנה. עם מאגר הידע הזה, התשובות הןPerson = ayaוPerson = chen. אלו הן מטרות להסקה; החלק们 המוצגים הם סימון, ולא סביבת ביצוע ניתנת להפעלה.
חברי המועדון הם איה, בן וצ'ן. איה וצ'ן מאומנים בצילום; בן מאומן רק באודיו. הכלל can_borrow(Person, camera) דורש גם חברות וגם אימון בצילום. מי עונה על can_borrow(Person, camera)?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
איה וצ'ן כולן את העובדות הנדרשות. בן יש לו אימון באודיו בלבד.
המשתנה Person ב-member(Person) עשוי לקבל ערך שונה מה-Member ב-trained(Person, camera) במהלך הוכחה אחת.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
כל הופעות של משתנה זהה חייבות לשמור על אותה קישר (binding) בהוכחה זו.
דוגמה פותרת: מעקב אחרי מועמד שנכשל
- התחילו ב
Person = ben.member(ben)מצליחה.trained(ben, camera)נכשלת: העובדה על ההכשרה הזמינה היא לאודיו, שלא תואמת מצלמה. - המנוע חוזר אחורה (backtracks) לנסות מועמד אחר,
Person = chen. שני התנאים מצליחים. אם נתבקשו עוד תשובות, הוא ממשיך לחפש; אם אין מועמדים שנותרו, אין עוד תשובות.
עקוב אחר חיפוש הנותר לאחר שהוחזרה איה.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
בן הוא חבר אך חסר לו עובדת אימון בצילום התואמת; האנג'ין מנסה אז את צ'ן.
התאמה משתפת ערכים לאורך כלל
- איחוד (Unification) מתאים איברים תוך קישור משתנים בצורה עקבית. התאמת
trained(Person, camera)עםtrained(chen, camera)מקשרתPersonלchen; התאמתו עםtrained(ben, audio)נכשלת כי הציוד שונה. - מטרה נכשלת פירושה שאין ניתן להוכיחה מבעובדות והכללים האלו. היא אינה מוכיחה שבבן לעולם לא השתמש במצלמה בחיים האמיתיים; ייתכן שמאגר היד פשוט אינו מלא.
התאמת trained(Person, camera) עם trained(chen, camera) מקשרת את Person ל-____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
הציוד תואם והארגומנט הראשון מספק את הקשר chen.
דוגמא מפורטת: כתיבת כלל חדש
- דרישה: מנטור יכול לעזור למישהו רק כאשר המנטור קיבל הכשרה במצלמה והלומד הוא חבר. הוסף את הכלל למטה, ואז פנה ל-
?- can_help(aya, ben).. trained(aya, camera)ו-member(ben)קיימים שניהם, ולכן המטרה מצליחה. כלל זה מאפשר לאיה לעזור לעצמה גם כן. אם יש להוציא עזרה עצמית מהכלל, הדרישה תצטרך תנאי נוסף; אל תחבר אותו בשקט.
can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner).
בהינתן trained(aya, camera). ו-member(ben)., והכלל can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner)., האם can_help(aya, ben) מצליחה?
Difficulty 1/5 · 100 coins + a small bonus on first completion today
לאיה יש אימון בצילום ובן הוא חבר; אין צורך שבן יהיה מאומן בצילום כדי להיות תלמיד.
סימונים נופלים מהיד
- עובדה מבטאת מידע ידוע; כלל מסיק מסקנה כאשר התנאים שלו מתקיימים; מטרה שואלת האם ניתן להוכיח מסקנה או אילו ערכים הופכים אותה לאמת.
- שמור על תאמינות משתנים חוזרים.
member(X), trained(Y, camera)יאפשר לחבר שאינו מוכשר להיכנס לכוחות ההגנה כי מישהו אחר זכה בהכשרה. שינוי שם משתנה יכול לשנות את משמעות הכלל.
מדרישה להוכחה
- כתוב עובדות, תרגם כל דרישה לכלל, ועלה מטרה. מעקב אחרי קישור משתנים בכל תנאי ונסה חלופות כאשר מועמד נכשל.
- כאן רק איה וצ'ן יכולים לקחת מצלמה להשאלה. ההכשרה של בן באודיו אינה הכשרה במצלמה. התוצאות נובעות מהבנק המידע הסופק, ולא מניחוד לגבי אנשים אמיתיים.
חברי המועדון הם איה, בן וצ'ן. איה וצ'ן מאומנים בצילום; בן מאומן רק באודיו. הכלל can_borrow(Person, camera) דורש גם חברות במועדון וגם אימון בצילום. כמה אנשים עונים לתנאי can_borrow(Person, camera)?
Difficulty 2/5 · 140 coins + a small bonus on first completion today
איה וצ'ן הן שתי הפתרונות.
כשל במטרה מוכיח שהאירוע המקביל לא התרחש מעולם מחוץ למאגר המידע הזה.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
כשל פירושו שמטרה זו לא ניתן להוכיח מתוך העובדות והכללים הזמינים.