我一直试图让我的头围绕浅层绑定和深层绑定,维基百科并没有很好地解释它。假设我有以下代码,如果语言使用动态范围
,输出结果如何a)深层绑定
b)浅层绑定?x: integer := 1
y: integer := 2
procedure add
x := x + y
procedure second(P:procedure)
x:integer := 2
P()
procedure first
y:integer := 3
second(add)
----main starts here---
first()
write_integer(x)
答案 0 :(得分:28)
深度绑定在将过程作为参数传递时绑定环境
Shallow绑定在实际调用过程时绑定环境
因此,当将add传递给第二个时,使用深度绑定进行动态作用域 环境是x = 1,y = 3,x是全局x,所以它将4写入全局x,这是write_integer选择的那个。
浅层绑定只会遍历,直到找到与名称对应的最近变量,因此答案为1。
答案 1 :(得分:0)
a)在深度绑定中,我们处理add的环境,其中x表示全局x,y表示第一个(最后执行的函数,其声明为y)局部的y。
x(全局)= x(全局)+ y(局部):x = 1 + 3 = 4
b)在浅层绑定中,我们处理第二个环境,其中x表示第二个局部的x,y表示第一个局部的y(最后执行的函数,声明为y)>
x(本地)= x(本地)+ y(本地):x = 2 + 3 = 5
BUT:write_integer(x)输出等于1的全局x
最后
a)4
b)1
答案 2 :(得分:-3)
浅层绑定应为5。 definations: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=15&lngWId=6