使用浅绑定时的输出是什么?

What is the output when you use shallow binding?

x : integer := 3                //global scope
y : integer := 4                //global scope
procedure add
    x := x + y
procedure second(P : procedure)
    x : integer := 5
    P()
procedure first
    y : integer := 6
    second(add)
first()               //first procedure call in the main function
write integer(x)      //function to print the value of a variable

first()后是运行,add()修改的是second::x,不是::x吧?所以输出是3 ... 但给出的答案是:Dynamic Sc​​ope (shallow binding): (x=5+y=6)=11

你虚构的语言的语义有些模糊,我不得不做出假设,例如这样的陈述......

    x : integer := 5

... 在函数 second 中定义了一个初始化为 5 的新局部变量 x 而不是将新值分配给全局变量 x.

然后用浅绑定通过时间add调用函数second将局部变量x设置为5和函数first 会将局部变量 y 设置为 6。因此 add 会将 x 的新值计算为 11。我想我们都同意这一点。

但我会将函数 add 解释为更新函数 second 局部变量 x,而不是全局变量 x 变量,保留全局变量 x 不变。因此应该打印 3。