פרק 2: אריתמטיקה

2.1 פעולות חשבון

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

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

מבחינה תחבירית, הביטויים החשבוניים הם ביטויים מורכבים בעלי מתאר חשבוני (+,* וכולי) ומתוארים מספריים. לכן אין להתפלא שניתן לכתוב אותם גם בכתיב ה"רגיל" של ביטויים מורכבים:

?- 11 is +(9,2).
Yes

למעשה, ניתן להציג את השאילתא באופן הבא:

?- is(11, +(9,2)).
Yes

זהו כתיב חוקי, אך הוא בדרך כלל פחות טבעי לנו וקשה יותר לפענוח.

ניתן לקבל תוצאות של פעולות חשבוניות על ידי שימוש במשתנים:

?- N is 7*2+3.
N = 17
Yes

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

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

?- N = 9+2.

תשובתו של פרולוג במקרה זה היא פשוט:

N = 9+2
Yes

פרולוג כובל כאן את המשתנה N לביטוי המורכב 9+2 באמצעות האחדה (נלמד בהרחבה על האחדה בפרק הבא).
מי שאחראי לביצוע פעולות החשבון ממש הוא is. הוא כמו מסמן לפרולוג: "עצור! הביטוי הבא איננו ביטוי רגיל, אלא ביטוי חשבוני שיש לחשבו!". על מנת לחשב את הביטוי 9+2 נשתמש ב-is:

?- N is 9+2.
N = 11
Yes

יש להקפיד לכתוב את הביטוי החשבוני מימין ל-is. אם נכתוב אותו משמאלו, נקבל הודעת שגיאה:

?- 7*2+3 is N.
ERROR: Arguments are not sufficiently instantiated

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

farenheit2celsius(F, C) :- C is (F-32)*5/9.

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

?- farenheit2celsius(95,C).
C = 35
Yes
?- farenheit2celsius(32,C).
C = 0
Yes

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

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

?- farenheit2celsius(F,35).
ERROR: Arguments are not sufficiently instantiated
^ Exception: (8) 35 is (_G284-32)*5/9 ?

מנסה לבצע את החישוב. אך בעת החישוב הוא נתקל במשתנה לא מאותחל (המשתנה F מצידו הימני של is) ונכשל.
זו אותה הודעת שגיאה שקיבלנו כשהצגנו את השאילתא 7*2+3 is N. כעת אנו יודעים את פשרה.

מבוא

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

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

סיכום

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