Вопрос достаточно наивный -- почему в sum-list рекурсия не сворачивается в цикл? (define summator (lambda (initial-value) (lambda (proc) (proc (lambda (value) (summator (+ initial-value value))) initial-value)))) (define sum-list (lambda (list-arg) (let loop ((current-summator (summator 0)) (rest-list list-arg)) (current-summator (lambda (next-proc result) (if (null? rest-list) result (loop (next-proc (car rest-list)) (cdr rest-list)))))))) Это из-за замыкания lambda (next-proc result)? Если да, то как переписать код, чтобы сворачивалось? :)