Posted to tcl by aspect at Wed Jan 15 12:35:58 GMT 2014view pretty

; properly, this should probably simply be:
;  (call-with-current-continuation (lambda (k) (fib-cps x k)))
(define (fib x)
  (fib-cps x (lambda (x) x)))

(define (fib-cps x k)
  (if (<= x 1)
    (k 1)
    (fib-cps (- x 1)
             (lambda (y)
               (fib-cps (- x 2)
                        (lambda (z)
                          (k (+ y z))))))))

(for-each (lambda (x)
            (display x)
            (display " ")
            (display (fib x))
            (newline))
          '(0 1 2 3 4 5 6 7 8 9 10))