שאלת מבחן בשפות תכנות - האוניברסיטה הפתוחה 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`