On Mon, 9 Aug 2010 01:23:00 -0700, YC <[email protected]> wrote: > Hi all - > > I am running into a difference of behaviors when I define a procedure with > syntax-case via `begin-for-syntax` versus requiring it from another module > via (require (for-syntax ...)). It seems that if the procedure has > syntax-case literals defined, the literal-matching works if the procedure > is > defined via `begin-for-syntax`, but not when imported via > `require`/`for-syntax`. > > Any idea on what I am missing/misusing here? > > Below is an example with literal.ss and test-literal.ss showing that it > does > not work: > > ;; literal.ss - cond* matches a cond-like syntax and convert it to an > nested > if syntax. has an `else` syntax-case literal > #lang scheme/base > (define (cond* stx) > (syntax-case stx (*else*) > ((~) > #`(void)) > ((~ (*else* exp exp2 ...)) > #`(begin (void) exp exp2 ...)) > ((~ (test exp exp2 ...) rest ...) > #`(if test > (begin exp exp2 ...) > #,(cond* #`(cond* #,@#'(rest ...))))) > )) > > (provide cond*) >
You need a (require (for-template scheme/base)) in the 'literal.ss' file because the function is at phase 0 producing syntax at a lower phase (-1, which is template), so you need to import the bindings from scheme/base for that phase. _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users

