[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: isn't computation-rules redundant?



On Fri, 26 Mar 2004, Alex Shinn wrote:

> ... and both versions are easier to read if you actually include the
> "and" in the LHS, sorry about that:
> 
>    (define-syntax-computations and ()
>      (and) #f
>      (and x) x
>      (and x y z ...) (if x (and y z ...) #f))

I agree that this is more readable.  However, there may be some value in
mirroring the syntax-rules bracketing, if only to avoid confusion by those
familiar with the latter.

One rationale for the current decoupling of the defining form from the
transformer (as in syntax-rules) is that
one has a uniform way of denoting a transformer, whether it is bound to a
name using define-syntax, bound using let(rec)-syntax, or used
anonymously.  Your proposal, while more brief, conflates declaring the
transformer and binding it, and only in define forms but not
let(rec)-forms - in the latter you still have to write it out the long
way.  

I have another idea: instead of using define-syntax, introduce a
form DEFINE-TRANSFORMER which will handle both syntax-rules and
syntax-computations, and which can be portable extended to handle other
kinds of tranformers should the need arise in future.  So one would write

   (define-transformer name
     (syntax-rules (...)  ...))

   (define-transformer name
     (syntax-computations (...) ...))

   (define-transformer name
     (lambda (stx) (syntax-case stx (...)  ...)

and so on.  The same goes for LET-TRANSFORMER and LETREC-TRANSFORMER.

Regards
Andre