The Little Schemer iguens-only * & co
Estoy teniendo dificultades para entender lo que está pasando con The Little Schemer'sevens-only*&co
ejemplo en la página 145.
Aquí está el código:
(define evens-only*&co
(lambda (l col)
(cond
((null? l)
(col '() 1 0))
((atom? (car l))
(cond
((even? (car l))
(evens-only*&co (cdr l)
(lambda (newl product sum)
(col (cons (car l) newl)
(opx (car l) product)
sum))))
(else
(evens-only*&co (cdr l)
(lambda (newl product sum)
(col newl product (op+ (car l) sum)))))))
(else
(evens-only*&co (car l)
(lambda (newl product sum)
(evens-only*&co (cdr l)
(lambda (dnewl dproduct dsum)
(col (cons newl dnewl)
(opx product dproduct)
(op+ sum dsum))))))))))
La inicialcol
puede ser:
(define evens-results
(lambda (newl product sum)
(cons sum (cons product newl))))
Lo que no entiendo es, conl
como'((1) 2 3)
, entra inmediatamente en la finalelse
con(car l)
como(1)
y(cdr l)
como(2 3)
. Bien, pero mi mente se queda en blanco tratando de resolver eldnewl
, dproduct
, dsum
desde elnewl
, product
, sum
. También sería útil que alguien me ayudara a configurar DrRacket o Chez Scheme o MIT-Scheme para ejecutar un paso a paso.
Pero tal vez estoy deslumbrando demasiado pronto. ¿Se supone que algún principiante que lea esto por primera vez realmente entienda esta continuación salvaje?