Here is another one Q on tail recursion. Is this a tail call? The result of
(foo) is 10.
At each iteration the loop captures the local variable "n" in a lambda and
saves in a list. At the end of the iteration "+" is applied to the evaluation
of all the lambdas. It looks to me like the capture of the binding has to
invalidate tail-recursion. Is that true?
(define (foo)
(let iter ((proc-list '()) (n 4))
(if (zero? n) (apply + (map (lambda (proc) (proc)) proc-list))
(iter (cons (lambda () n) proc-list) (1- n)))))
Motivation: I have been looking into streams programming (from SICP) and
thinking about delay/force and future/touch.
Thanks,
Matt