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


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... 但给出的答案是:动态范围(浅绑定):(x=5+y=6)=11

你的虚构语言的语义有些模糊,我被迫做出假设,例如......

x : integer := 5

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

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

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

最新更新