[plt-scheme] Expanding into top-level
Paul Steckler wrote:
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> I have a syntax-rules macro that expands into a top-level
> definition, something like
>
> (define-syntax foo
> (syntax-rules ()
> [(_ name e1 e2)
> (define name (bar e1 e2))]))
>
> Except I don't really want to define `name', I want
> to define `name-prime'. How can I build an identifier
> and still have a top-level definition?
>
> -- Paul (who doesn't know the macro system as well as he should)
There may be a better way than this, but it works...
(define bar +)
(define-syntax (foo stx)
(syntax-case stx ()
[(_ name e1 e2)
#`(define
#,(datum->syntax-object
stx
(string->symbol
(string-append
(symbol->string (syntax-object->datum #'name))
"-prime")))
(bar e1 e2))]))
(foo name 1 2)
name-prime ; -> 3
-d