Andy Wingo <[email protected]> writes:
> On the whole I am skeptical. But, Chez Scheme and Racket both made this
> change. So I could go either way, though I would like thoughts from
> other people before proceeding.
While I like the change, another solution is to try to make a
'syntax-case' form that returns a lambda like syntax-rules.
Either,
(define-syntax foo
(syntax-case* ()
((foo ...) ...)
...))
or if we need access to the syntax object for e.g. unhygienic macros
(define-syntax foo
(syntax-case* stx ()
((foo ...) ...)
...))
I haven't used this in practice, but it would cut down on some
consistent verbosity. A rough implementation could be
(define-syntax syntax-case*
(lambda (stx) ; goodbye forever old friend ;-)
(syntax-case stx ()
((syntax-case* syntax-object literals rule rules ...)
(identifier? #'syntax-object)
#'(lambda (syntax-object)
(syntax-case syntax-object literals
rule
rules ...)))
((syntax-case* literals rule rules ...)
#'(lambda (syntax-object)
(syntax-case syntax-object literals
rule
rules ...))))))
It wouldn't match up with the meaning of syntax-case* in racket, but if
that's important to anyone, feel free to come up with another name :-)
--
Ian Price
"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"