Динамический / Статический прицел с Глубоким / Мелким переплетом (упражнения)
Я изучаю динамическую / статическую область видимости с глубокой / мелкой привязкой и выполняю код вручную, чтобы увидеть, как на самом деле работают эти разные области видимости / привязки. Я прочитал теорию и погуглил некоторые примеры упражнений, и те, которые я нашел, очень просты (например,этот что было очень полезно при динамическом определении объема) Но у меня возникли проблемы с пониманием того, как работает статическая область видимости.
Здесь я опубликую упражнение, чтобы проверить, правильно ли я нашел решение:
учитывая следующую программу, написанную в псевдокоде:
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: я пытаюсь выполнять некоторые упражнения, подобные этим, если вы знаете, где я могу найти такие проблемы (желательно с решениями), пожалуйста, дайте ссылку, спасибо!