language-agnostic binding scoping dynamic-scope

language agnostic - Ámbito dinámico-Enlace profundo vs Enlace superficial



language-agnostic binding (2)

He estado tratando de entender mi encuadernación superficial y profunda, wikipedia no hace un buen trabajo explicándolo correctamente. Digamos que tengo el siguiente código, ¿cuál sería la salida si el lenguaje usa un alcance dinámico con

a) encuadernación profunda

b) vinculante superficial?

x: integer := 1 y: integer := 2 procedure add x := x + y procedure second(P:procedure) x:integer := 2 P() procedure first y:integer := 3 second(add) ----main starts here--- first() write_integer(x)


El enlace profundo vincula el entorno en el momento en que el procedimiento se pasa como un argumento

La unión superficial une el entorno en el momento en que se llama al procedimiento

Por lo tanto, para el alcance dinámico con vinculación profunda cuando la adición se pasa al segundo, el entorno es x = 1, y = 3 y la x es la x global, por lo que escribe 4 en la x global, que es la que recogió el objeto write_integer.

El enlace superficial solo se desplaza hacia arriba hasta que encuentra la variable más cercana que corresponde al nombre, por lo que la respuesta sería 1.