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 [email protected] http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports
