Subject: Re: Special forms vs. Macros
From: rpw3@rpw3.org (Rob Warnock)
Date: Sun, 09 Jan 2005 04:14:38 -0600
Newsgroups: comp.lang.lisp
Message-ID: <bbadnYSk5PeTmXzcRVn-tQ@speakeasy.net>
[Barry knows this, but just for completeness...]

Barry Margolin  <barmar@alum.mit.edu> wrote:
+---------------
| The list of special forms in the language spec is the result of 
| experienced language designers and implementors, who know which 
| operators typically need to be recognized as primitives by the 
| implementation.  The spec also says that an implementation is
| allowed to implement any special operator as a macro.
+---------------

And vice-versa [2nd sentence below], with one additional proviso:

    3.1.2.1.2.2 Macro Forms
    ...
    An implementation is free to implement a Common Lisp special
    operator as a macro. An implementation is free to implement
    any macro operator as a special operator, but only if an
    equivalent definition of the macro is also provided.

Presumably this is so that user-written code-walkers that don't
know that some macro is really a special operator in a particular
implementation can still call MACROEXPAND and do (almost) the
right thing.


-Rob

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607