2011-02-08 10 views
6

Mi pregunta se refiere al código siguiente:ayuda para entender esta implementación de los contras y el coche en el esquema utilizando lambdas

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

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

Mi problema es con cómo este código funciona en realidad. Por lo que puedo entender contras. está devolviendo un procedimiento que contiene las variables xey dentro de su alcance. coche. luego toma el procedimiento devuelto de contras. y lo aplica a otra lambda que toma dos argumentos p y q y devuelve p. Mi confusión se encuentra dentro de esa segunda lambda, ¿de dónde vienen exactamente los valores de P y Q?

Respuesta

7

Las variables p y q son los dos elementos de la "celda cons"; es decir, son x y y en cons.. Si ejecuta (car. (cons. 1 2)), se obtiene (ampliando cons.):

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

que se convierte en (usando la definición de car.):

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

Enchufar el argumento en el cuerpo de la primera lambda, obtienes:

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

Otra sustitución como esa le da 1, el primer elemento de la "celda de cons".

+0

Gracias, Jeremiah, ahora entiendo cómo funciona. – 4tlulz

Cuestiones relacionadas