(However, I suspect that you didn't *really* mean (quote var) in your
original code, or? If you didn't, then of course my simpler syntax-rules
macro isn't what you want.)

On Wed, Apr 26, 2023 at 7:20 PM Mikael Djurfeldt <mik...@djurfeldt.com>
wrote:

> How about:
>
> (define-syntax eval-var
>   (syntax-rules ()
>     ((_ var) var)))
>
> ?
>
> Then you don't need to import (ice-9 local-eval) and re-export things from
> there.
>
> Just for elucidation:
>
> The reason why we chose the syntax-case macro system for Guile was that it
> *both* gives you hygiene *and* quite a lot of control. The reason why the
> original code didn't work (your first post in this thread) is that
> "(the-environment)" was expanded in the lexical context where it was
> written (the Scheme+ module),
>
> However, syntax-case gives you the ability to insert that identifier into
> the context of the expansion instead:
>
> (define-syntax eval-var
>   (lambda (x)
>     (syntax-case x ()
>       ((_ var)
>        (with-syntax ((the-environment (datum->syntax #'var
> 'the-environment)))
>          #'(let ((env (the-environment)))
>               (local-eval (quote var) env)))))))
>
> (It's the datum->syntax form which gives the lexical context of var to
> the-environment.)
>

Reply via email to