Hi,
The following works in chicken and bigloo, but fails on gambit 4.0b12:
--------------------------------------------------------------------------------------- (define-macro (build-funcs) (define any '(list? number? string?))
(define funcnames `((is-string string?) (is-number number?) (is-list list?) (is-any ,any))) (define (build desc) (let ((name (car desc)) (tests (if (list? (cadr desc)) (cadr desc) (cdr desc)))) `(define ,name (lambda (o) (or ,@(map (lambda (x) (list x 'o)) tests)))))) `(begin ,@(map build funcnames)))
(pp (lambda () (build-funcs) #t)) (build-funcs)
(is-any "dd") ---------------------------------------------------------------------------------------
It seems that the reference to the `any' variable is unbound inside `funcnames'. If you move the definition of `any' outside of the body of `build-funcs', everything works fine.
Not sure if this is a bug, or a misunderstanding on my part.
Best Regards,
Ben