使用浅绑定时的输出是什么?
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 Scope (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。
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 Scope (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。