Dynamischer Scoping - Tiefe Bindung gegen flache Bindung
-
20-09-2019 - |
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)
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
Die flache Bindung sollte 5. Defizierungen sein:http://www.planet-source-code.com/vb/scripts/showcode.asp?txtCodoD=15&lngwid=6