Re: suggestion: a shorter convenience form
Per Bothner 26 Jun 2006 23:55 UTC
> Consider Kent's implementation of cond in the reference
> implementation using the common extension:
>
> (define-syntax (cond x)
> (syntax-case x ()
> [(_ c1 c2 ...)
> ...
> [_ (syntax-error x)]))]))]))
>
> With define-syntax-case (at least if I understand you correctly)
> it becomes:
>
> (define-syntax-case cond ()
> (x (syntax-case x ()
> [(_ c1 c2 ...)
> ...
You could do that. But since syntax-error is not in the specification,
I'm not sure it is relevant. If you leave out the syntax-error call,
you get a worthwhile simplification:
(define-syntax-case cond ()
((_ c1 c2 ...) ...))
Note also that if you *do* want syntax-error, it might be better to
report error location more specifically that the entire cond.
> Adding an extra binding form also adds to the cognitive load
> for those learning the macro system. For the experienced
> macro writer it hardly matters which is used.
I don't know. Scheme API design has this bad tradition of
designing APIs for maximum verbosity of the common case. call/cc is
another example, given that 90% of the time the argument is a
lambda expression, which makes code that can be hard to understand
even more difficult.
--
--Per Bothner
xxxxxx@bothner.com http://per.bothner.com/