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

שאלה ג (25 נקודות)

להלן הצגה של מנונית תחכומה בשפה "יוטורג":



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

א (10 נקודות)

הקצו ליטורי תחכומים של טיפוס Type Variables של כל התחכומים בביטויים, וחברו משוואות משתנאות מהתחכומים לטיפוסים של קיימים שם.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמבחן 2017 סמסטר ב · 2017 · סמסטר ב
הסקת טיפוסיםמערכות טיפוסיםlet
יש לעבור על כל תת-ביטוי בתוכנית, להקצות לו משתנה טיפוס ייחודי, ולייצר משוואות אילוצים בהתאם לכללי הטיפוסיות של כל מבנה בשפה (קבוע, משתנה, let, if, proc, הפעלת פונקציה).
אלגוריתם הסקת הטיפוסים פועל בשני שלבים עיקריים: ראשית, הקצאת משתני טיפוס לכל תת-ביטוי. שנית, יצירת מערכת משוואות (אילוצים) על משתנים אלו על פי כללי הטיפוסיות של השפה. פתרון מערכת המשוואות יניב את הטיפוס של הביטוי, אם קיים.

שלב 1: הקצאת משתני טיפוס (Type Variables)

נקצה משתנה טיפוס לכל תת-ביטוי ולכל משתנה בתוכנית. נסמן את הטיפוס של ביטוי ב-:

  • (זהו הטיפוס של הביטוי כולו)


שלב 2: יצירת משוואות טיפוסים

נגזור את מערכת המשוואות על סמך מבנה הביטוי וכללי הטיפוסיות:

1. קבועים ופרימיטיבים:
  • (הקבוע 9 הוא מספר שלם)
  • (הקבוע 3 הוא מספר שלם)
  • (הפעולה - מקבלת זוג שלמים ומחזירה שלם)
  • (הפרדיקט zero? מקבל שלם ומחזיר בוליאני)


2. ביטוי `let y = 9 in ...`:
  • (המשתנה y מקבל את הטיפוס של הביטוי אליו הוא נקשר)
  • (הטיפוס של ביטוי let הוא הטיפוס של גוף הביטוי)


3. ביטוי `let z = zero?(-(y,3)) in ...`:
  • (המשתנה z מקבל את הטיפוס של הביטוי אליו הוא נקשר)
  • (הטיפוס של ביטוי let הוא הטיפוס של גוף הביטוי)


4. הפעלת הפעולה `-` על `(y,3)`:
  • (מכלל הטיפוסיות של הפעלת פונקציה)


5. הפעלת הפרדיקט `zero?`:
  • (מכלל הטיפוסיות של הפעלת פונקציה)


6. הגדרת הפרוצדורה `proc (w) ...`:
  • (הטיפוס של פרוצדורה הוא פונקציה מטיפוס הפרמטר לטיפוס הגוף)


7. הפעלת המשתנה `w` על `z`:
  • (הטיפוס של w חייב להיות פונקציה מהטיפוס של z לטיפוס התוצאה)


8. ביטוי `if z then ... else ...`:
  • (התנאי בביטוי if חייב להיות בוליאני)
  • (ענף ה-then וענף ה-else חייבים להיות מאותו טיפוס)
  • (הטיפוס של ביטוי if הוא הטיפוס המשותף של שני הענפים)