;;; FIBC -- FIB using first-class continuations, written by Kent Dybvig (library (rnrs-benchmarks fibc) (export main) (import (rnrs) (rnrs-benchmarks)) (define (_1+ n) (+ n 1)) (define (_1- n) (- n 1)) ;;; fib with peano arithmetic (using numbers) with call/cc (define (addc x y k) (if (zero? y) (k x) (addc (_1+ x) (_1- y) k))) (define (fibc x c) (if (zero? x) (c 0) (if (zero? (_1- x)) (c 1) (addc (call-with-current-continuation (lambda (c) (fibc (_1- x) c))) (call-with-current-continuation (lambda (c) (fibc (_1- (_1- x)) c))) c)))) (define (main) (run-benchmark "fibc" fibc-iters (lambda (result) (equal? result 2584)) (lambda (x c) (lambda () (fibc x c))) 18 (lambda (n) n))))