The Little Schemer evens-only * & co
Trudno mi zrozumieć, co się dzieje z The Little Schemer'sevens-only*&co
przykład na stronie 145.
Oto kod:
(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))))))))))
Początekcol
może być:
(define evens-results
(lambda (newl product sum)
(cons sum (cons product newl))))
To, czego nie dostaję, jestl
tak jak'((1) 2 3)
, przechodzi natychmiast do finałuelse
z(car l)
tak jak(1)
i(cdr l)
tak jak(2 3)
. Dobrze, ale mój umysł robi się pusty, próbując rozwiązać problemdnewl
, dproduct
, dsum
znewl
, product
, sum
. Byłoby również pomocne, gdyby ktoś mógł mnie pouczyć, jak skonfigurować DrRacket lub Chez Scheme lub MIT-Scheme do prowadzenia steppera.
Ale może za wcześnie zaszumiałem. Czy ktokolwiek początkujący to czyta po raz pierwszy powinien rozumieć tę dziką kontynuację?