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

Reply via email to