And that did it! Thanks so much ^_^
On Tue, Jan 15, 2013 at 9:27 PM, Jon Rafkind <rafk...@cs.utah.edu> wrote: > Untested but I think this will work > > > (define-syntax (my-macro stx) > (syntax-case stx () > [(_ (id1 id2 ...) body ...) > #'(lambda (expr) > (match expr [(list 'id1 id2 ...) body ...]))])) > > > On 01/15/2013 10:22 PM, Paul Meier wrote: > > Hi friends, > > I'm working on a macro that expands into a match statement. It looks > something like > > (define-syntax (my-macro stx) > (syntax-case stx () > [(_ (id1 id2 ...) body ...) > (with-syntax ([match-pattern > (datum->syntax stx (cons 'list (syntax->datum > #'(id1 id2 ...))))]) > #'(lambda (expr) > (match expr > [match-pattern body ...]))))) > > So in effect, it expands > > (my-macro (push i) (printf "~v" i) > > into > > (lambda (expr) > (match expr > [(list push i) (printf "~v" i)])) > > Here is the problem: I'd like the first entry of the match list to be > quoted (e.g. 'push) rather than unquoted, as it is above, since 'match' > will interpret this as a free variable, meaning > > ((my-macro (push i) i) '(dont-push 45)) will evaluate to 45, rather than > fail to match (the desired behavior). > > Unfortunately, trusty (quote (syntax->datum stx id1)) and or any > variation thereof will do what it's supposed to: quote whatever expression > will evaluate into whatever I want quoted. > > I could just write the quotes into the expressions using the macro, a la > (my-macro ('push i) ...), but Shirly there's a way around this? > > Any help would be appreciated. Thanks for your time; I'm loving my > explorations into Racket ^_^ > > -Paul > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > >
____________________ Racket Users list: http://lists.racket-lang.org/users