Du hast noch
Immediate- und
Deferred Substitution vergessen.
Ich habe es so verstanden (->keine Garantie auf Korrektheit!):
Eager- und Lazy Substitution
Unterscheiden sich im Zeitpunkt der Auswertung von Ausdrücken. Z.B. bei
{with {x {+ 5 5}} {x}}
wird der Ausdruck
{+ 5 5} in einer Programmiersprache mit
Eager Substitution erst berechnet, bevor das
x durch ihn ersetzt wird. Bei
Lazy Substitution würde der ganze Ausdruck an den Stellen von
x eingesetzt werden.
Immediate- und Deferred Substitution
Unterscheiden sich im Zeitpunkt der Ersetzung von Variablen durch Ausdrücke. Bei einer Programmiersprache mit
Immediate Substitution werden "Variablen"(-Argumente) sofort ersetzt, je nach Substitution Regim (Eager-/Lazy ) mit dem schon berechneten Wert des Ausdrucks oder mit dem gesamten Ausdruck. Bei
Deferred Substitution wird mit der Ersetzung gewartet, bis man während der Ausführung auf eine "Variable"(Argument) trifft und erst dann wird sie ersetzt, wieder je nach Substitution Regime mit dem Wert oder dem Ausdruck.
Eager- und Lazy Evaluation
Unterscheiden sich im Zeitpunkt der Auswertung von Ausdrücken. Bei Eager Evaluation werden die Werte von Ausdrücke immer sofort berechnet. Bei Lazy Evaluation wird der ganze Ausdruck solange weitergereicht, bis ein Static Point (?) erreicht wird, der den tatsächlichen Wert eines Ausdrucks benötigt, wodurch es schließlich zur Berechnung kommt.
(Static- und Dynamic Reduction)
Ist glaube ich nur eine andere Bezeichnung für Immediate- und Deferred Substitution!?