On 2013-09-17, at 3:02 PM, Steve Graham jsgrahamus@yahoo.com wrote:
Found it. Thanks.
Why did you define fib twice?
The definition is:
(define (fib n)
(define (fib n) (if (< n 2) n (+ (fib (- n 1)) (fib (- n 2)))))
(fib n))
So there is a global function called fib, in which is defined an internal function called fib. This allows the compiler to call the internal fib more efficiently, without refering to a global variable. The semantics of Scheme are such that if the fib global variable is redefined, a recursion on the global variable fib would have to call the new definition. Such a redefinition is actually what happens when you do (trace fib). I notice that in the code there is a (declare (block)) which actually makes the internal definition trick needless.
The bottom line is that I did this for performance reasons.
Marc