Я работал вместе с The Little Schemer, чтобы узнать Схему и использовать PLT-Scheme для моей среды.
Маленький Schemer очень помог мне с рекурсией (сейчас это прямо для меня), но я застрял на части книги, которая вводит "коллекционеры" и называет функцию в целом продолжением.
Вот пример кода, который они использовали. Я понимаю рекурсивные элементы, но я застрял, в частности, на лямбда-функциях - мой ум не может следовать по пути и как устанавливаются аргументы для этой лямбда-функции (так как их единственным вызовом является вызов их снова в рекурсии, есть нет конкретного использования внутри тела функции).
Если кто-то может более или менее дать мне прорыв пути вычисления через рекурсию функции в сборщики лямбды, это может мне помочь.
;; Build a nested list of even numbers by removing the odd ones from its
;; argument and simultaneously multiply the even numbers and sum the odd
;; numbers that occur in its argument.
(define (even-only-collector l col)
(cond
((null? l)
(col (quote ()) 1 0))
((atom? (car l))
(cond
((even? (car l))
(even-only-collector (cdr l)
(lambda (newl p s)
(col (cons (car l) newl)
(* (car l) p) s))))
(else
(even-only-collector (cdr l)
(lambda (newl p s)
(col newl
p (+ (car l) s)))))))
(else
(even-only-collector (car l)
(lambda (al ap as)
(even-only-collector (cdr l)
(lambda (dl dp ds)
(col (cons al dl)
(* ap dp)
(+ as ds)))))))))
;; The collector function
(define (collector newl product sum)
(cons sum
(cons product newl)))
Спасибо заранее!