Re: How many arguments to a macro transformer? Keith Wright (23 Jul 2005 06:15 UTC)
Re: How many arguments to a macro transformer? Andre van Tonder (23 Jul 2005 14:21 UTC)

Re: How many arguments to a macro transformer? Andre van Tonder 23 Jul 2005 14:21 UTC

On Sat, 23 Jul 2005, Keith Wright wrote:

> Oops!  I said:
>
>> On the other hand, it seems more consistant if
>>
>>  (define-syntax (swap! a b) <body)
>>
>> were the same as
>>
>>  (define-syntax swap! (lambda ( _ a b) <body> ))
>>
>> which implies that swap! is right and the rest of
>> the program is wrong.
>
> I just noticed that this is a change you made in
> the last revision,

Yes, I indeed made the change so that the short form

   (define-syntax (swap! a b)

corresponds to the long form

   (define-syntax swap!
     (lambda (form)
       (let ((a (cadr  form))
             (b (caddr form)))

and /not/

   (define-syntax swap!
     (lambda (_ a b) ....

which I had before.  While this latter (discarded) format would have been
more brief for certain simple (especially lexical) macros, notice that it
requires the input form to be a proper list and is therefore less general than
the long form

   (define-syntax swap!
     (lambda (form)

which can accept dotted lists or (perhaps in future) even single identifiers.

The long form is now compatible with the SYNTAX-CASE system.  However, the short
form above is not.  Indeed, I find the short form

   (define-syntax (swap! a b)

more useful than the relatively recently introduced SYNTAX-CASE one:

   (define-syntax (swap! form)

even though the latter would conform more to one's expectations from experience
with DEFINE.

Cheers
Andre