On Tue, Apr 8, 2008 at 12:45 PM, Alaric Snell-Pym
<[EMAIL PROTECTED]> wrote:
>
>  riaxpander manages this:
>
>
> > (use riaxpander)
> >
> > (define-macro (my-assert test error)
> >        `(if (not ,test) (error ,error)))
> >
> >
> > (define-syntax foo
> >        (syntax-rules ()
> >                ((_ x) (let ((tmp x)) (my-assert x "failed")))))
> >
> > (macroexpand '(let ((x 1)) (foo x)))
> >
> >

In this case the hygiene is actually circumvented: riaxpander
runs before the normal macro-expansion (the expansion of
low-level macros happens afterwards which makes this
work). Referential transparency requires that bindings that
are introduced by a hygienic macro may not be accessible by
name alone by other macros (context is required as well).
(Now, I believe this is the correct wording, but I may be wrong)


cheers,
felix


_______________________________________________
Chicken-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to