[racket] keyword arguments in define-syntax-rule
At Wed, 10 Aug 2011 10:58:34 -0600, Jon Rafkind wrote:
> Can `define-syntax-rule' support keyword arguments? Preferably keywords
> with default values.
>
> (define-syntax-rule (foo #:x [x 5]) x)
> (foo)
> (foo #:x 2)
>
> If this sounds like a good idea and could be implemented I can give it a
> whirl.
I don't think it would be a good idea.
A keyword in the pattern language of `define-syntax-rule' and
`syntax-rules' is a literal. For simple cases like `foo', you can write
(define-syntax foo
(syntax-rules ()
[(_) 5]
[(_ #:x x) x]))
Supporting combinations of keywords quickly gets out of hand, at which
point you want `syntax-parse'.
Existing `syntax-rules' and `syntax-case' macros certainly use keywords
as literals. I don't know of a `define-syntax-rule' macro that uses
keywords, but I think the pattern language of `define-syntax-rule'
shouldn't be different from the pattern language of `syntax-rules'.
Overall, general keyword handling seems like a job best left to
`syntax-parse'.