30

我一直试图了解浅绑定和深绑定,维基百科没有很好地解释它。假设我有以下代码,如果语言使用动态范围,输出会是什么

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)
4

3 回答 3

30

深度绑定在过程作为参数传递时绑定环境

浅绑定在实际调用过程时绑定环境

因此,对于具有深度绑定的动态范围,当 add 被传递到第二个时,环境是 x = 1,y = 3 并且 x 是全局 x,因此它将 4 写入全局 x,这是由 write_integer 拾取的。

浅绑定只是向上遍历,直到找到与名称对应的最近变量,因此答案将为 1。

于 2009-11-18T03:49:05.460 回答
0

a) 在深度绑定中,我们处理 add 的环境,其中 x 指的是全局 x,y 指的是局部于 first 的 y(最后执行的函数,它有一个 y 的声明)

x(全局)= x(全局)+ y(局部):x = 1 + 3 = 4

b) 在浅绑定中,我们处理 second 的环境,其中 x 指的是局部于 second 的 x,y 指的是局部于 first 的 y(最后执行的函数,其声明为 y)

x(本地)= x(本地)+ y(本地):x = 2 + 3 = 5

但是:write_integer(x) 输出全局 x 等于 1

最后

一)4

b) 1

于 2020-10-03T12:18:41.520 回答
-3

浅绑定应该是 5. 定义: http ://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=15&lngWId=6

于 2011-12-13T04:20:06.297 回答