Re: [Scheme-reports] Are generated toplevel definitions secret?
Peter Bex 24 Apr 2011 15:42 UTC
On Sun, Apr 24, 2011 at 05:21:30PM +0200, Peter Bex wrote:
> > Heh, cool. Fortunately it's not central to my argument. How about an
> > accessor macro:
> >
> > (begin
> > (define-syntax define-getter
> > (syntax-rules ()
> > ((_ var init)
> > (begin
> > (define val init)
> > (define-syntax var
> > (syntax-rules ()
> > ((_) val)))))))
> >
> > (define-getter x 10)
> > (define-getter y 20))
> >
> > If I put that in a chicken module, import the module, then evaluate (x)
> > and (y), does that evaluate to 10 and 20, respectively?
>
> Yeah. Each macro carries its syntactic information with it, like a
> closure. So "val" in the macro expansion would refer to the x that is
> defined in that module.
I overlooked the fact that val is used, not var. This will give an
error because the "val" is defined in a different phase than the "var"
macro is declared.
If I change (define val init) to (define-for-syntax val init), the
generated "var" macro will pick up on it. Then it will use the same
"val" for both x and y, and hence it will overwrite the binding.
So it's basically the same as putting this in your module:
(define val 10)
(define val 20)
I'm not 100% sure but I suppose this could be considered a bug.
Cheers,
Peter
--
http://sjamaan.ath.cx
--
"The process of preparing programs for a digital computer
is especially attractive, not only because it can be economically
and scientifically rewarding, but also because it can be an aesthetic
experience much like composing poetry or music."
-- Donald Knuth
_______________________________________________
Scheme-reports mailing list
Scheme-reports@scheme-reports.org
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports