LINUX.ORG.RU

хвостовая рекурсия (lisp/scheme)


0

0

Вопрос достаточно наивный -- почему в 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)? Если да, то как переписать
код, чтобы сворачивалось? :)

Хм, походу я солгал, все-таки, сворачивается :)

swizard
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.