2
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

4

1 回答 1

2

您虚构语言的语义有些模糊,我不得不做出假设,例如……

    x : integer := 5

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

然后按时间进行浅绑定add,调用函数second将局部变量设置x为 5,函数first将局部变量设置y为 6。因此add将计算一个新值x11。我想我们都同意。

但我会将 function 解释add为更新 function 的局部变量xsecond,而不是全局x变量,从而使全局变量保持不变x。因此应打印 3。

于 2021-12-13T13:54:23.863 回答