On Thu, Oct 1, 2009 at 4:11 PM, Sam TH <sa...@ccs.neu.edu> wrote: > On Thu, Oct 1, 2009 at 4:01 PM, Casey Klein > <clkl...@eecs.northwestern.edu> wrote: >> Can someone explain why this macro expands without error in a module >> but not in the REPL? >> >> (define-syntax (m stx) >> (syntax-case stx () >> [(_ x) >> (with-syntax ([(y) (generate-temporaries (syntax (x)))]) >> (syntax (define (y) y)))])) >> >>> (m q) >> compile: unbound identifier (and no #%top syntax transformer is bound) in: q1 > > This version of the macro works: > > (define-syntax (m stx) > (syntax-case stx () > [(_ x) > (with-syntax ([(y) (list (gensym (syntax-e #'x)))]) > (syntax (define (y) y)))]))
...at the top level. Who knows what craziness will happen if you put this in other contexts. (For instance, in a compiled module, I think gensym'd identifiers can wreak havoc, but don't quote[*] me.) I would not recommend Sam's code as a general purpose fix. Personally, I think you have run into a generate-temporaries bug. But we won't know for sure until Matthew either corrects your code or responds with "Fixed in svn." ;) --Carl [*] Don't quote, quasiquote, syntax, syntax/loc, quasisyntax, quasisyntax/loc, or quote-syntax me on this one. If you're using PLT Redex, don't term me either. _________________________________________________ For list-related administrative tasks: http://list.cs.brown.edu/mailman/listinfo/plt-dev