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!