At 22:30 Uhr +0000 22.11.2006, Mark Smith wrote:
Hi guys,
First time on the mailing list, or any mailing list for that matter. I have a very simple question about macros if someone would fill me in: how do I expand a macro like you can in Common Lisp or some other Scheme implementations?
See the mailing list archive, https://webmail.iro.umontreal.ca/pipermail/gambit-list/2005-August/000326.ht...
Writing your own macro system *is* an option, of course, if you really want to and know how it should behave :). I'm in the process of doing this.
I've been using the pp function but it complains under some situations i.e. when my macro expands into a definition.
For debugging during development, I'm usually printing the expansion from the expander code, like (written from memory, untested):
(define-macro (define-bothtimes . body) (eval `(define ,@body)) `(define ,@body))
(define-bothtimes (pp-through val) (pp val) val)
;; (depending on whether the definition of pp-through is in a different file or not, a normal define or a define-compiletime would have sufficed, but define-bothtimes will work in both cases)
(define-macro (foo x y) (pp-through `(blabla ',x ',y)))
An alternative is to write and debug transformers as normal functions and call them from the macro code:
(define-bothtimes (foo-trans x y) `(blabla ',x ',y))
(define-macro (foo . args) (apply foo-trans args))
; (Notably, (define-macro foo foo-trans) won't work, and there's no easy operation I know of for doing this.)
Christian.