main =
let
one = Debug.log "one" 1
two = Debug.log "two" 2
three = Debug.log "three" 3
in
show "Hello"
Eigentlich kompiliert wird bis auf
var main = function() {
var three = A2($Debug.log,
"three",
3);
var two = A2($Debug.log,
"two",
2);
var one = A2($Debug.log,
"one",
1);
return $Graphics$Element.show("Hello");
}();
Beachten Sie, wie die Reihenfolge umgedreht zu sein scheint. Wenn wir einen anderen Wert einführen, die auf etwas anderes in der wir verbindlich abhängig ist, geschieht folgendes statt:
main =
let
one = Debug.log "one" 1
two = Debug.log "two" 2
three = Debug.log "three" 3
four = Debug.log "four" three + one
in
show "Hello"
verwandelt sich in
var main = function() {
var three = A2($Debug.log,
"three",
3);
var two = A2($Debug.log,
"two",
2);
var one = A2($Debug.log,
"one",
1);
var four = A2($Debug.log,
"four",
three) + one;
return $Graphics$Element.show("Hello");
}();
Die lange Rede kurzer Sinn ist daher, dass die Werte, die ‚aren t abhängig von einem anderen Wert im selben Umfang wird von unten nach oben verarbeitet. Wenn ein Wert auf einen anderen Wert innerhalb desselben Bereichs angewiesen ist, wird er separat behandelt und an den unteren Rand gesetzt.
Dies ist ein Implementierungsdetail.
Eine let-Klausel ist keine Liste von Anweisungen, sondern eine Menge von Deklarationen. Der Compiler kann seine "Ausführungsreihenfolge" bestimmen. Im Allgemeinen müssen Sie sich bei der funktionalen Programmierung normalerweise nicht mit der Ausführungsreihenfolge auseinandersetzen, sondern mit der Beziehung zwischen Konzepten und Daten. – thSoft