שאלת מבחן בשפות תכנות - האוניברסיטה הפתוחה 2023 - מערכות טיפוסים

להלן נתונה תוכנית בשפת "ויקיש" (INFERRED):
let p=proc(x: ?) -(x,5)
in
  (p -((p 5),5))
ברצוננו לקבוע מהו טיפוס התוכנית (אם קיים). לשם כך, עליכם להשתמש באלגוריתם שנלמד בפרק 7 להקשת הטיפוס.

א. (15 נקודות)

הקצו לביטוי הנתון בשאלה ולתתי הביטויים שלו משתני-טיפוס (Type Variables) מתאימים, וחברו משוואות מתאימות לביטוי הנתון ולתתי הביטויים שלו.

ב. (15 נקודות)

פתרו את המשוואות שהרכבתם בסעיף א' תוך שימוש ב-substitution ו-unification בדומה למתואר בספר בעמודים 252-258. בסיום פתרון המשוואות רשמו מהו הטיפוס שאותו הקשתם עבור התוכנית הנתונה.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד ב2023סמסטר ב
מערכות טיפוסיםהסקת טיפוסים
הקצו משתנה-טיפוס לכל תת-ביטוי: t_p לפרוצדורה, t_x לפרמטר x, ו-t_body לגוף. בנו משוואות מהגדרת proc, מביטוי החיסור, ומיישום הפרוצדורה, ואז פתרו בעזרת unification.
פתרון — הסקת טיפוסים לתוכנית INFERRED

סעיף א — הקצאת משתני-טיפוס ובניית משוואות

נסמן:
  • — טיפוס התוכנית כולה (הביטוי let ... in ...)
  • — טיפוס המשתנה p (ופרוצדורת proc(x: ?) -(x,5))
  • — טיפוס הפרמטר x
  • — טיפוס הביטוי -(x,5) (גוף הפרוצדורה)
  • — טיפוס הביטוי (p 5) (היישום הפנימי)
  • — טיפוס הביטוי (p 5)-5) כלומר -((p 5),5)
  • — טיפוס הביטוי (p -((p 5),5)) (היישום החיצוני = גוף ה-in)
משוואות:

1. מגדרת proc(x: ?) -(x,5): הביטוי הוא פרוצדורה מ- ל-:2. מביטוי החיסור -(x,5): חיסור דורש ארגומנטים מסוג int ומחזיר int:3. מיישום (p 5): p מופעלת על 5 (מסוג int), טיפוס התוצאה הוא :4. מביטוי -((p 5),5): חיסור דורש int:5. מיישום (p -((p 5),5)): p מופעלת על ביטוי מסוג , התוצאה מסוג :6. טיפוס ה-let שווה לטיפוס הגוף:סעיף ב — פתרון המשוואות בעזרת Substitution ו-Unification

מהמשוואה (2): , .

מהמשוואה (4): , .

מהמשוואה (1): .

נאחד עם משוואה (3): נאחד עם משוואה (5): , כלומר ממשוואה (6): .

טיפוס התוכנית: `int`