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