Динамический / Статический прицел с Глубоким / Мелким переплетом (упражнения)

Я изучаю динамическую / статическую область видимости с глубокой / мелкой привязкой и выполняю код вручную, чтобы увидеть, как на самом деле работают эти разные области видимости / привязки. Я прочитал теорию и погуглил некоторые примеры упражнений, и те, которые я нашел, очень просты (например,этот что было очень полезно при динамическом определении объема) Но у меня возникли проблемы с пониманием того, как работает статическая область видимости.

Здесь я опубликую упражнение, чтобы проверить, правильно ли я нашел решение:

учитывая следующую программу, написанную в псевдокоде:

int u = 42; 
int v = 69;
int w = 17;
proc add( z:int )
  u := v + u + z
proc bar( fun:proc )
  int u := w;
  fun(v)
proc foo( x:int, w:int )
  int v := x;
  bar(add)
main
  foo(u,13)
  print(u)
end;

Что печатается на экране

а) используя статическую область видимости? ответ = 180

б) используя динамический охват и глубокое связывание? answer = 69 (сумма для u = 126, но это локальная переменная foo, верно?)

в) использование динамического объема и мелкой привязки? answer = 69 (сумма для u = 101, но это локальная переменная foo, верно?)

PS: я пытаюсь выполнять некоторые упражнения, подобные этим, если вы знаете, где я могу найти такие проблемы (желательно с решениями), пожалуйста, дайте ссылку, спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос