On Sep 11, 2009, at 8:17 PM, Eduardo Cavazos wrote:
By the way, it would be nice if it looked like this:
(define fib
(ifte (less-than= 1)
(constant 1)
(bi (uni (sub 1) fib)
(uni (sub 2) fib) +)))
I.e. without the lambdas used for quoting the recursive fibs. But of
course, this version triggers an error because 'fib' doesn't exist
at definition time.
Any suggestions for this?
Change it to:
(define (fib x)
((ifte (less-than= 1)
(constant 1)
(bi (uni (sub 1) fib)
(uni (sub 2) fib) +))
x))
and now you get:
> (pretty-print
(expand/optimize
'(let ()
(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)))))
(letrec ((fib_0
(lambda (x_1)
(if (<= x_1 '1)
'1
(+ (fib_0 (- x_1 '1)) (fib_0 (- x_1 '2)))))))
(time-it '"(fib 34)"
(lambda () (+ (fib_0 '33) (fib_0 '32)))))
Cute, no?
Aziz,,,