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