| fac-tail-rec-direct-cps.scm - The tail recursive factorial function - in direct and continuation passing style. | Lecture 3 - slide 33 : 43 Program 5 |
(define (fact-tail-rec n r)
(if (= 0 n)
r
(fact-tail-rec (- n 1) (* r n))))
(define (fact-tail-rec-cps-1 n r k)
(if (= 0 n)
(k r)
(fact-tail-rec-cps-1
(- n 1)
(* r n)
(lambda (v) ; Eventually v becomes (fact n), because the base case passes
(k v)) ; the result via a chain of trivial "pass on" functions.
; Are all these (lambda(v) (k v)) functions really necessary?
) ; No - see the next variant called fact-tail-rec-cps-2.
)
)
(define (fact-tail-rec-cps-2 n r k)
(if (= 0 n)
(k r)
(fact-tail-rec-cps-2
(- n 1)
(* r n)
k ; Eventually (fact n) is passed to k. k is the continuation
) ; of the original call to the factorial function.
)
)