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/>

Reply via email to