Common Lisp has succeeded. Since publication of the first edition of
this book in 1984, many implementors have used it as a de facto
standard for Lisp implementation. As a result, it is now much easier
to port large Lisp programs from one implementation to another.
Common Lisp has proved to be a useful and stable platform for
rapid prototyping and
systems delivery in artificial intelligence and other areas.
WIth experience gained in using Common Lisp for so many
applications, implementors found no shortage of opportunities for
innovation.
One of the important
characteristics of Lisp is its good support for experimental extension
of the language; while Common Lisp has been stable, it has not stagnated.

The 1984 definition of Common Lisp was imperfect and incomplete.
In some cases this was inadvertent: some odd boundary situation was
overlooked and its consequences not specified, or different
passages in were conflict, or some property of Lisp was so well-known
and traditionally relied upon that I forgot to write it down.
In other cases the informal committee that was defining
Common Lisp could not settle on a solution, and therefore agreed to leave
some important aspect of the language unspecified rather than
choose a less than satisfactory definition. An example
is error handling; 1984 Common Lisp had plenty of ways to signal
errors but no way for a program to trap or process them.

Over the next year I collected reports of errors in the book and gaps in the
language. In December 1985, a group of implementors and users met in
Boston to discuss the state of Common Lisp. I prepared
two lists for this meeting, one of errata and clarifications
that I thought would be relatively uncontroversial (boy, was I wrong!)
and one of more substantial changes I thought should be considered and
perhaps voted upon. Others also brought proposals to discuss.
It became clear to everyone that there was now enough interest in Common Lisp,
and dependence on its stability, that a more formal mechanism was needed for
managing changes to the language.

This realization led to the formation of X3J13, a subcommittee of
ANSI committee X3, to produce a formal American National Standard
for Common Lisp. That process is nearing completion. X3J13 has
completed the bulk of its technical work in rectifying the 1984
definition and codifying extensions to that definition that have
received widespread use and approval. A draft standard is now
being prepared; it will probably be available
in 1990. There will then be a period (required by ANSI) for
public review. X3J13 must then consider the comments it receives
and respond appropriately. If the comments result
in substantial changes to the draft standard, multiple public review
periods may be required before the draft can be approved as an American
National Standard.

Fortunately, X3J13 has done an outstanding job of documenting its work.
For every change that came to a formal vote, a document was prepared
that described the problem to be solved and one or more solutions.
For each solution there is a detailed proposal for changing the
language; a rationale; test cases that distinguish the proposal
from the status quo or from other proposals for solving that problem;
discussions of current practice, cost to implementors, cost to users,
cost of not adopting the proposal, benefits of adoption,
aesthetic criteria; and any relevant informal discussion that may have
preceded creation of the formal proposal. All of these proposal
documents were made available on-line as well as in paper form.
By my count, by June 1989 some
186 such proposals were approved as language changes.
(This count does not include many proposals that came before the committee
but were rejected.)

The purpose of this second edition is to bridge the gap between the
first edition and the forthcoming ANSI standard for Common Lisp.
Because of the requirement for formal public review,
it will be some time yet before the ANSI standard is final.
This book in no way resembles the forthcoming standard (which
is being written independently
by Kathy Chapman of Digital Equipment Corporation with assistance
from the X3J13 Drafting Subcommittee).

I have incorporated into this second edition
a great deal of material based on the votes of X3J13,
in order to give the reader a picture of where the language is heading.
My purpose here is not simply to quote the X3J13 documents verbatim
but to paraphrase them and relate them to the structure of the first
edition. A single vote by X3J13 may be discussed in many parts of this book,
and a single passage of this book may be affected by many of the votes.

I wish to be very clear: this book is not an official document
of X3J13, though it is based on publicly available material
produced by X3J13. In no way does this book constitute a definitive
description of the forthcoming ANSI standard. The
committee's decisions have been remarkably stable (it has rescinded
earlier decisions only two or three times), and I do not
expect radical changes in direction.
Nevertheless, it is quite probable
that the draft standard will be substantively revised in response to
editorial review or public comment.
I have therefore reported here on the actions of X3J13 not to
inscribe them in stone, but to make clear how the language
of the first edition is likely to change.
I have tried to be careful
in my wording to avoid saying ``the language has been changed''
and to state simply that
``X3J13 voted at such-and-so time to make the following change.''

Until the day when an official ANSI Common Lisp standard emerges,
it is likely that the 1984 definition of Common Lisp will
continue to be used widely. This book has been designed
to be used as a reference both to the 1984 definition
and to the language as modified by the actions of X3J13.

It contains the entire text of the first edition
of Common Lisp: The Language, with corrections
and minor editorial changes;
however, more than half of the material in this edition is new.
All new material is
identified by solid lines
in the left margin.
Dotted lines in the left margin indicate material from the first edition
that applies to the 1984 definition but that has been modified
by a vote of X3J13. Modifications to these outmoded
passages are explained by preceding or following text (which will
have a solid line in the margin).
In summary:

To use the 1984 language definition, read all material that does not
have a solid line in the margin.

To use the updated language definition, read everything, but
be wary of material with a dotted line in the margin.

At the end of the book is an index of the X3J13 votes, ordered
by the committee's internal code names (included to ease cross-reference
to the X3J13 documents, which may be useful during the public review
periods). References to this list of votes appear as numbers
in angle brackets; thus
``<14>'' refers to the vote on issue number 14, whereas
``[14]'' refers to reference 14 in the bibliography.

I have kept changes to the wording of the first-edition material to a minimum.
Obvious spelling and typographical errors have been corrected,
and the entire text has been edited to a uniform style of
spelling and punctuation. (Note in particular that the first edition
used the spelling ``signalling'' but this edition,
in deference to the style decision of the X3J13 Drafting
Subcommittee, uses ``signaling.'') A few minor
changes were made to accommodate typographical or layout constraints.
(For example, the word ``also'' has been deleted from the first
sentence of chapter 1, partly to make that paragraph look better
and partly to allow a better page break at the bottom of page 2.)
In a very few cases the first edition contained substantive errors
that I could not in good conscience correct silently; these have
been flagged by paragraphs beginning with the phrase
Notice of correction.

The chapter and section numbering of this edition matches that
of the first edition, with the exception that a new
section 7.9
has been interpolated.
Four new chapters (26-29)
describe substantial changes approved by X3J13: an extended
loop macro, a pretty printer interface, the Common Lisp
Object System, and the Common Lisp Condition System.

X3J13, in the course of its work, formed a subcommittee to study
whether additional means of iteration
should be standardized for use in Common Lisp, for a great
deal of existing practice in this area was not included in the
first edition because of lack of agreement in 1984.
The X3J13 Iteration Subcommittee produced reports on three possible facilities.
One (loop) was approved for inclusion in the forthcoming draft standard
and is described in chapter 26.

X3J13 expressed interest in the other two approaches (series and generators),
but the consensus as of January 1989
was that these other approaches were not yet sufficiently mature or
in sufficiently widespread use to warrant inclusion in the draft Common Lisp
standard at that time. However, the subcommittee was directed to continue work
on these approaches and X3J13 is open to the possibility of standardizing
them at a later date.
Please note that I do not wish the prejudge the
question of whether X3J13 will ever choose to make the other two proposals the
subject of standardization. Nevertheless,
I have chosen to include them in the second edition,
in cooperation with Dr. Richard C. Waters,
as appendices A and B,
in order to make these ideas
available to the Lisp community. In my judgement these proposals
address an area of language design not otherwise covered by Common Lisp
and are likely to have practical value even if they are never
adopted as part of a formal standard.

Some new material in this book has nothing to do with the work of X3J13.
In many places I have added explanations, clarifications, new examples,
warnings, and tips on writing portable code.
Appendix C contains a piece of code
that may help in understanding the backquote syntax.

This second edition,
unlike the first edition, also includes a few diagrams to pep up the text.
However, there are absolutely no new jokes, and very few outright lies.