Andy Wingo <wi...@pobox.com> 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"

Reply via email to