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。