[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: How many arguments to a macro transformer?
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