[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
backquote proposal
Date: Wed, 20 Nov 85 14:05:35 est
From: Kent Dybvig <dyb%indiana.csnet at CSNET-RELAY.ARPA>
I like the proposed backquote change, especially since it will
allow source pretty-printers to print the original source more
accurately.
However, I do not like the use of "special objects" as special
form keywords, and would prefer to use ordinary identifier names
instead.
The reason is that, at least in my implementation, #! objects are
not symbols, and special form keywords are. I would very much
like to retain this property, for selfish reasons and because I
think it helps anyone writing program-manipulating programs to
know that special forms always begin with a symbol.
Also, it would not make sense that backquote special forms are
written with the #! if the quote special form is not.
OK, I sympathize with this. What do other people think?
Note that I never said that #!QUASIQUOTE was NOT a symbol. Things would
work just fine if it was, although it would have to print the same way
it reads.
Therefore, I propose that we use the special forms quasiquote,
unquote, and unquote-splice, dropping the #!.
I never suggested making #!UNQUOTE and #!UNQUOTE-SPLICE be special
forms, so I don't think this argument applies to them, except through
guilt by association (i.e. consistency).
I think that flagging the printed representation of these markers with
#! is good since it helps indicate that something peculiar is going on.
There is always the danger that someone will write something like
(memq z '(quote unquote quasiquote))
and that someone else will lift that code and put it into backquote
form somewhere, say
(let ((form `(cond ((memq z '(quote unquote quasiquote)) ,value))))
(compute form))
and then get the error message "QUASIQUOTE unbound variable" and wonder
what on earth happened. This violation of referential transparency is
unavoidable with non-local features like backquote, but the #!'s help
mitigate it since they make the violation more voluble.