Abdulaziz Ghuloum wrote:
Change it to:
(define (fib x)
((ifte (less-than= 1)
(constant 1)
(bi (uni (sub 1) fib)
(uni (sub 2) fib) +))
x))
Hmmm. Look at the time I get on that one:
~ # ikarus --r6rs-script /scratch/_fib-fp-no-qf-a.sps
running stats for (fib 34):
423 collections
3336 ms elapsed cpu time, including 184 ms collecting
3362 ms elapsed real time, including 197 ms collecting
1771677280 bytes allocated
~ #
Ed
----------------------------------------------------------------------
(import (rnrs)
(ikarus))
(define (bi f g c)
(lambda (x)
(c (f x)
(g x))))
(define (uni f c)
(lambda (x)
(c (f x))))
(define (sub x)
(lambda (y)
(- y x)))
(define (constant x)
(lambda (y)
x))
(define (ifte f g h)
(lambda (x)
(if (f x)
(g x)
(h x))))
(define (less-than= x)
(lambda (y)
(<= y x)))
(define (fib x)
((ifte (less-than= 1)
(constant 1)
(bi (uni (sub 1) fib)
(uni (sub 2) fib) +))
x))
(time (fib 34))
----------------------------------------------------------------------