Frage

Ich habe versucht, meinen Kopf um die flache Bindung und die tiefe Bindung zu machen, Wikipedia macht es nicht gut, es richtig zu erklären. Sagen Sie, ich habe den folgenden Code, mit welcher Ausgabe wäre die Ausgabe, wenn die Sprache dynamisch Scoping verwendet

a) tiefe Bindung

b) flache Bindung?

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)
War es hilfreich?

Lösung

Die tiefe Bindung bindet die Umgebung zum Zeitpunkt des Verfahrens als Argument

Die flache Bindung bindet die Umgebung zum Zeitpunkt der Tatsache, dass das Verfahren tatsächlich aufgerufen wird

Für die dynamische Scoping mit einer tiefen Bindung beim Add wird die Umgebung x = 1, y = 3 und das X das globale X ist also 4 in das globale X, das ist das, das vom Write_Integer aufgenommen wird.

Flache Bindung durchquert nur, bis sie die nächste Variable findet, die dem Namen entspricht, sodass die Antwort 1 sein würde.

Andere Tipps

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top