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 であるため、write_integer によって取得されたグローバル x に 4 を書き込みます。

浅いバインディングは、名前に対応する最も近い変数が見つかるまでトラバースするだけなので、答えは 1 になります。

于 2009-11-18T03:49:05.460 に答える