Dans Gambit Scheme, je n'arrive pas à invoquer une macro dans la définition d'une autre macro si je compile le fichier. Voici un exemple artificiel:La macro d'appel macro donne "variable indéfinie" dans Gambit Scheme
;;;; example.scm
(define-macro (w/gensyms gs body)
`(let ,(map (lambda (g) `(,g (gensym ',g)))
gs)
,body))
(define-macro (compose-macro f g)
(w/gensyms (x)
`(lambda (,x) (,f (,g ,x)))))
(define my-cadr
(lambda (x)
((compose-macro car cdr) x)))
;; $ gsc example.scm
;; *** ERROR IN #<procedure #2> -- Unbound variable: w/gensyms
Cependant, si je charge le fichier avec la (include ...)
forme spéciale dans l'interpréteur, il fonctionne
$ gsi
> (include "example.scm")
> (pp my-cadr)
(lambda (x) ((lambda (#:x0) (car (cdr #:x0))) x))
Est-ce que quelqu'un sait ce qui se passe ici? Puis-je convaincre Gambit de me laisser utiliser w/gensyms dans la définition d'une autre macro dans un fichier compilé?
Je comprends que je ne devrais pas utiliser define-macro – scpayson