; Fibonacci
(define (fibo i)
(if (= i 0)
1
(* i (fibo (- i 1)))))
; Rewrite in if-then-else form
(define (ite i cond kSucc kFail)
(if (cond i)
(kSucc i)
(kFail i)))
(define (fiboIte i)
(ite
i
(lambda (i) (= i 0))
(lambda (x) 1)
(lambda (i) (* i (fiboIte (- i 1))))))
; Continuation-Passing-Style
(define (cont i) (lambda (k) (k i)))
(define (iteCont iCont kCond kSucc kFail)
(if (iCont kCond)
(iCont kSucc)
(iCont kFail)))
(define (fiboCont i)
(iteCont
(cont i)
(lambda (i) (= i 0))
(lambda (x) 1)
(lambda (i) (* i (fiboIte (- i 1))))))