I see. I figured that I was probably confused.
Thanks!
Ben
On Tue, 22 Feb 2005 10:34:59 -0500, Marc Feeley feeley@iro.umontreal.ca wrote:
Your code is not legal R5RS Scheme. In R5RS Scheme you can't use in the evaluation of the value part of a "define" a variable "define"d at the same level. I.e. this is illegal:
(define (f x)
(define n 10) (define m (+ n 1))
...)
You should use let* instead like this:
(define-macro (build-funcs) (let* ((any '(list? number? string?)) (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))))
Note that your original code will work in Gambit 3.0, but in version 4.0 the implementation was changed to detect these violations of the R5RS Scheme standard.
Marc