2011-02-08 6 views
6

Moje pytanie odnosi się do następującego kodu:Pomoc zrozumienia tej realizacji minusy i samochód na schemacie za pomocą lambdy

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

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

Mój problem jest z tym, jak ten kod faktycznie działa. O ile rozumiem minusy. zwraca procedurę zawierającą zmienne xiy w jej zasięgu. samochód. następnie podejmuje procedurę zwrotu z wad. i stosuje ją do innej wartości lambda, która przyjmuje dwa argumenty p i q i zwraca p. Moje zamieszanie leży w tej drugiej lambda, skąd dokładnie pochodzą wartości P i Q?

Odpowiedz

7

Zmienne p i q to dwa elementy "komórki cons"; tj. są one x i y w cons.. Jeśli prowadzisz (car. (cons. 1 2)), masz (rozszerzenie cons.):

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

który zamienia się (za pomocą definicji car.):

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

podłączając argument do ciała pierwsza lambda, otrzymasz:

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

Kolejna substytucja daje 1, pierwszy element "komórki cons".

+0

Dziękuję Jeremiaszu, teraz rozumiem, jak to działa. – 4tlulz

Powiązane problemy