2010-12-06 10 views
3

Für den Code unten kann ich nicht verstehen, wie die Bindungen (x, y, z) auftreten. Bitte überprüfen Sie den Code aus, ich werde mein Problem im Folgenden näher erläutern:Benötigen Sie Hilfe beim Verständnis von Bindungen in Schema Code

(define (w x) 
    (lambda (y z) 
    (begin 
     (set! x (+ (* y x) z)) x))) 
(define f1 (w 3)) 
(f1 4 2) 
(f1 2 1) 

Der Ausgang 14, 29. Diese sind Werte für x.

Dies bedeutet zunächst, x = 3, y = 4, z = 2. Im zweiten Aufruf, d. H. (F1 2 1), ist x = 14, y = 2, z = 1.

Meine Zweifel:

Wie funktioniert die Bindung zuerst auftreten, warum ist x = 3, y 4 = und z = 2? Wenn es mit Lambda-Ausdruck in der Funktion zu tun hat, bitte erläutern Sie, wie es funktioniert .. Ich habe das Gefühl, das ist, wo mein Verständnis bricht.

Als nächstes, warum ist die erste Antwort von x = 14 beibehalten im zweiten Aufruf, dh (f1 2 1)?

Danke für in diese suchen :)

Antwort

4

Wenn w ausgeführt wird, ist es ein aus dem inneren Lambda Verschluss schafft. Da x von außerhalb dieses inneren Lambda stammt, wird x innerhalb dieses Verschlusses gespeichert (in diesem Fall f1).

So hat f1 eine Variable innerhalb dass x darstellt, und es beginnt als 3. Wenn Sie f1 laufen, ist es die Mathematik auswertet und setzt dann seine eigenex 14.

Die Moral zu sein , ein lambda ist mehr als nur Code; es ist Code kombiniert mit den Variablen es schließt über, wie diese x.

+0

danke erjiang. Wie wird das "interne" x erstellt? – Roy

+0

Nun, die einfache Antwort ist, dass es von 'Lambda' erstellt wurde. Sobald das "Lambda" ausgeführt wird, wird die Funktion von Scheme in einen internen Abschluss (Code + Umgebung) konvertiert, den Sie wahrscheinlich nicht sehen können. – erjiang

+0

das verwirrt mich immer noch. Wie steuern Sie, wie viele Variablen von Ihrem internen Lambda-Ausdruck erstellt werden? – Roy

Verwandte Themen