2011-02-08 10 views
6

mia domanda riguarda il seguente codice:Aiuto comprendere questa implementazione di contro e auto a schema utilizzando lambda

(define (cons. x y) 
    (lambda (m) (m x y))) 

(define (car. z) 
    (z (lambda (p q) p))) 

Il mio problema è di come questo codice funziona realmente. Per quanto posso capire, contro. sta restituendo una procedura contenente le variabili x e y nel suo ambito. auto. quindi prende la procedura restituita da cons. e lo applica a un altro lambda che prende due argomenti p e q e restituisce p. La mia confusione si trova all'interno di quella seconda lambda, da dove provengono esattamente i valori di P e Q?

risposta

7

Le variabili p e q sono i due elementi della "cella di controllo"; vale a dire, sono x e in cons.. Se si esegue (car. (cons. 1 2)), si ottiene (in espansione cons.):

(car. (lambda (m) (m 1 2))

che si trasforma in (usando la definizione di car.):

((lambda (m) (m 1 2)) (lambda (p q) p))

Collegando l'argomento nel corpo del primo lambda, ottieni:

((lambda (p q) p) 1 2)

Un'altra sostituzione come quella ti dà 1, il primo elemento della "cella di controllo".

+0

Grazie, Geremia, ora capisco come funziona. – 4tlulz

Problemi correlati