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

לפניך תוכנית בשפת Implicit-Refs (שפת ייחסמוריות):מה הניב התוכנית הזו?

א. (num-val 12)

ב. (num-val 9)

ג. התוכנית מחזירה שגיאה בזמן הריצה.

ד. (num-val 11)

ה. (num-val 2)

ו. (num-val 4)

ז. (proc-val ...)

סמן את התשובה הנכונה ורשם במחברת הבחינה בלנד.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד ג2024סמסטר ב
מפרשיםמצבמעקב אחר קודScheme
עקבו אחר ביצוע התוכנית בשפת Implicit-Refs: חשבו את הביטוי (proc (x) (x 3) x) — זוהי הפעלת פרוצדורה אנונימית עם הארגומנט x (ה-proc-val הנוכחי). בגוף: (x 3) = הפעלת proc-val על 3 = -(3,1) = 2. עדכנו y ל-2.
התשובה הנכונה היא ה. `(num-val 2)`.

נעקוב אחר ביצוע התוכנית צעד אחר צעד:

סביבה ראשונית — IMPLICIT-REFS:
כל משתנה מאוחסן בתא זיכרון (ref). let y=12 יוצר תא loc0 עם הערך 12.


שלב 1: let y=12 in ... — env: {y→loc0}, store: [loc0]=num-val 12.

שלב 2: let x= proc(x) -(x,1) in ... — יוצר תא loc1 עם proc-val. env: {x→loc1, y→loc0}, store: [loc1]=proc-val(proc(x)-(x,1)).

שלב 3: בגוף ה-begin, נחשב:
set y = (proc (x) (x 3)  x)
הביטוי (proc (x) (x 3) x) הוא הפעלת פרוצדורה בשפה. בשפת IMPLICIT-REFS הפרוצדורות הן unary: (f arg) = קריאה ל-f עם ארגומנט arg. לכן:
  • (proc (x) (x 3) x) = קריאה לפרוצדורה proc(x) -> (x 3) עם ארגומנט x.
  • הארגומנט x (מהסביבה) = proc-val(proc(x)-(x,1)).
  • גוף הפרוצדורה: (x 3) — עכשיו x (הפרמטר הפנימי) = proc-val(proc(x)-(x,1)).
  • (x 3) = הפעלת proc-val(proc(x)-(x,1)) על 3 = -(3,1) = num-val 2.
לכן set y = num-val 2 → store: [loc0] = num-val 2.

שלב 4: y — קוראים את store[loc0] = num-val 2.

סיכום: (proc (x) (x 3) x) מפעיל פרוצדורה אנונימית עם הפרמטר x כארגומנט. הפרמטר x בגוף הוא proc-val, ולכן (x 3) = -(3,1) = 2. y מקבל 2, ומוחזר 2.

התשובה: ה. (num-val 2).