On Sun, Jul 03, 2011 at 04:44:46PM -0400, Noah Lavine wrote: > I agree that this is much shorter, but I'm worried about defining the > short syntax in a way that forces you to choose between syntax-rules > and syntax-case.
Except, it doesn't. My version doesn't insert either syntax-case or syntax-rules; it just inserts the lambda and lets you do whatever. Granted, in practice that makes the shortcut useful for syntax-case only, but at least it's highly consistent with how define's shortcut works, and should therefore be less confusing. > What I mean is that you could just as easily have > > (define-syntax (foo bar) > ...) > > expand to > > (define-syntax foo > (syntax-rules () > ((_ bar) ...))) Racket resolves this by having a macro called define-syntax-rule, which allows you to define a one-branch syntax-rules macro. Thus these two macros are identical: (define-syntax-rule (foo bar baz) (...)) (define-syntax foo (syntax-rules () ((_ bar baz) (...)))) > It seems to me that this makes a somewhat arbitrary choice, which > isn't great. I'd rather see some way to unify the two possibilities, > but I don't know what that would be. There's also the possibility of > making it expand to > > (define-syntax foo > (syntax-case tmp ... > ((bar) ...))) > > because it is more analogous to how regular procedures work. The problem with this is that this then favours the one-branch variant, which is not a common case for syntax-case macros. Cheers, Chris.