The Little Schemer apenas para adultos * & co
Estou tendo dificuldade em entender o que está acontecendo com The Little Schemer'sevens-only*&co
exemplo na página 145.
Aqui está o 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))))))))))
A inicialcol
pode ser:
(define evens-results
(lambda (newl product sum)
(cons sum (cons product newl))))
O que eu não estou conseguindo é, coml
Como'((1) 2 3)
, vai imediatamente para a finalelse
com(car l)
Como(1)
e(cdr l)
Como(2 3)
. Bom, mas minha mente fica em branco tentando resolver o problemadnewl
, dproduct
, dsum
denewl
, product
, sum
. Também seria útil se alguém pudesse me orientar sobre como configurar o DrRacket ou o Chez Scheme ou o MIT-Scheme para executar um stepper.
Mas talvez eu esteja falando cedo demais. Algum iniciante lendo isso pela primeira vez deveria entender essa continuação selvagem?