Escopo dinâmico / estático com encadernação profunda / rasa (exercícios)

Estou estudando o escopo dinâmico / estático com ligação profunda / superficial e código de execução manualmente para ver como esses diferentes escopos / ligações realmente funcionam. Li a teoria e pesquisei alguns exemplos de exercícios e os que encontrei são muito simples (comoeste o que foi muito útil no escopo dinâmico) Mas estou tendo problemas para entender como o escopo estático funciona.

Aqui, posto um exercício que fiz para verificar se obtive a solução certa:

considerando o seguinte programa escrito em pseudocódigo:

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;

O que é impresso na tela

a) usando escopo estático? answer = 180

b) usando escopo dinâmico e vinculação profunda? answer = 69 (soma de u = 126, mas é o v local de foo, certo?)

c) usando escopo dinâmico e ligação superficial? answer = 69 (soma de u = 101, mas é o v local de foo, certo?)

PS: Estou tentando praticar alguns exercícios como este, se você souber onde posso encontrar esses tipos de problemas (preferível com soluções), por favor, dê o link, obrigado!

questionAnswers(3)

yourAnswerToTheQuestion