On Sat, Jun 8, 2013 at 1:40 PM, Takashi Kato <[email protected]> wrote:
> On 08/06/2013 05:38, John Cowan wrote: > > Daniel Villeneuve scripsit: > > > >> (define-syntax m > >> (syntax-rules () > >> ((_) (lambda (a) (include "some/file.sch"))))) > >> > >> where the file "some/file.sch" contains, say, > >> > >> (+ a 1) > >> > >> Is the symbol `a' in "some/file.sch" supposed to match the > >> lambda's argument? > > > > Yes, I believe so: files are included at the S-expression level, > > not hygienically. > > I disagree. Since 'include' is exportable syntax then the expanded > expression should be like this; > > (lambda (~a) (include "some/file.sch")) > > Then compiler will compile it. Now, included 'a' is mere symbol so that > 'include' includes mere S-expression. So after include should be like this; > > (lambda (~a) (+ a 1)) > > How could compiler know these 2 symbols are the same? (I haven't checked > with current implementations, including mine, so what I'm saying might > not be the current situation, though.) Correct - the macro is hygienic, so the a in the file won't match the renamed a in the lambda. BTW, if the above macro is defined in a library, which file would be > included? The file in the same location of the library or macro caller > location? > By the time the include is expanded it has no idea in which file it was originally defined (barring some sort of self-introspection on source info), so the include path would naturally be relative to the caller location. -- Alex
_______________________________________________ Scheme-reports mailing list [email protected] http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports
