ניתן כמובן להגדיר חוקים אריתמטיים, כאלה שמתבצעות בהם פעולות חשבוניות. כך למשל, אנו יכולים להגדיר פעולה "המר מעלות פרנהייט למעלות צלזיוס" באמצעות החוק הבא:
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. כעת אנו יודעים את פשרה.
|