פרק 6: אופרטורים

6.2 הגדרת אופרטורים

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

  1. שם מתאר
  2. סוג (infix, prefix, או postfix)
  3. רמת קדימות
  4. אסוציאטיביות

הגדרת אופרטורים חדשים נעשית כך:

:- op(Precedence, Type, Name).

שורה זו היא הכרזה על אופרטור Name בעל רמת קדימות Precedence (מספר בין 0 ל-1200), אשר סוגו והאסוציאטיביות שלו מוגדרים באמצעות הביטוי Type. Type הוא אחד האטומים: xf, yf, xfx, xfy, yfx, yfy, fy, fx, כאשר f מציין את מיקום האופרטור ביחס למתואריו (כלומר קובע את סוגו), x מציין מתואר בעל רמת קדימות נמוכה משל האופרטור, ו-y מציין מתואר בעל רמת קדימות שווה או נמוכה מזו של האופרטור (x ו-y קובעים את האסוציאטיביות).

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

:-op(1200,fx,[:-,?-]).
:-op(500,yfx,[+,-]).

נניח לשם נוחות הקריאה וההבנה נרצה לכתוב עובדה כמו loves(harry,magic) כמשפט טבעי בעברית: harry loves magic. נעשה זאת על ידי הגדרת מתאר loves כאופרטור מסוג infix, למשל כך:

:- op(500, xfx, loves).

כעת אפשר לכתוב בתכנית harry loves magic. כעובדה חוקית לכל דבר, ואז לוודא כי אכן:

?- loves(harry, magic).
Yes

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

מבוא

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

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

סיכום

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