Hans Aberg <haber...@telia.com> writes: > On 6 Jan 2011, at 19:18, Patrick Bernaud wrote: > >> I have a case where a macro is defined in a file that is then loaded >> by another which makes use of the macro. And it produces a 'wrong type >> to apply' error from the VM. >> >> (Works fine with GUILE_AUTO_COMPILE=0 and compiled files removed). >> >> For example, with the 'when' macro from the manual: >> >> -%<---- when.scm ----%<- >> (define-macro (when cond exp . rest) >> `(if ,cond >> (begin ,exp . ,rest))) >> -%<---- when.scm ----%<- >> >> -%<---- test.scm ----%<- >> (load "when.scm") >> (when #t (display "Launching missiles!\n")) >> -%<---- test.scm ----%<- > > If you are writing your own macro, I find 'define-syntax' easier: > > [...]
It's not only easier, it also not inherently broken (as `define-macro' is). See <http://en.wikipedia.org/wiki/Hygienic_macro> for a discussion of the hygiene issue. For example, the following invocation of `when' will break when implemented with `define-macro' as above: (let ((begin #f)) (when #t (display "Launching missiles!\n"))) Regards, Rotty -- Andreas Rottmann -- <http://rotty.yi.org/>