On 1/10/07, Zbigniew <[EMAIL PROTECTED]> wrote:
Apropos of nothing, if you surround the body of FAC with (let ((fac fac)) ...) or even (let loop ((n n)) ...) then you avoid a global lookup on FAC on every recursive call. This is the same as compiling the file in block mode, except the latter doesn't work for exported definitions. This is something most people here probably know, but it's an interesting optimization trick that took me a while to come across.
Thanks, Zbigniew -- I had never thought to do that. :-) A macro comes to mind: (define-macro (define/rec sig . body) (let ((name (car sig))) `(define (,name ,@(cdr sig)) (let ((,name ,name)) ,@body)))) (macroexpand '(define/rec (fac n) (if (zero? n) 1 (* n (fac (- n 1)))))) => (##core#set! fac (lambda (n) (let ((fac fac)) (if (zero? n) 1 (* n (fac (- n 1))))))) --g _______________________________________________ Chicken-users mailing list Chicken-users@nongnu.org http://lists.nongnu.org/mailman/listinfo/chicken-users