(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. ) )