Common LISP. The language. 2nd ed. (English) Zbl 0757.68008

Bedford, MA: Digital Press. Chichester: John Wiley & Sons, XXIII, 1029 p. (1990).
At the first sight this is but a second edition of such an important book after five years. And indeed one will find the whole matter of the 1984 edition, duly and carefully revised. The success of the Common LISP language was for a part due to the clear, thorough and very complete description found in this former book.
Actually this new version brings a profound change, which necessitated to multiply the number of pages by two (now reaching more than 1000). With these addenda this book describes the forthcoming ANSI standard for Common LISP. The preface recalls the history of the emergence of this standard and points out the numerous people who were involved in its preparation. Yet the book remains perfectly homogeneous; all modifications of the existing notions have been put at the right place so that the user is fitted with a linear and logical exposition. Then one finds easily to any question a documented answer illustrated with numerous examples. A clever typographical device separates clearly what must be read if you need the (revised) old version, and what if you need the future standard.
In addition six new chapters have been added about more substantial changes:
\(\bullet\) A new iteration, the loop facility, which is a considerably extended version of the loop macro. Though one must accept a syntax a little apart of usual Lisp, it results in more readable iterations than can be written with the do mechanism.
\(\bullet\) Two chapters (put as appendices for they are not completely elaborated) treat two new data structures, series and generators: The idea of series is to combine aspects of sequences, streams and loops, that is a global handling of all elements, a lazy evaluation, and an iterative treatment. Generators are another approach to provide iteration, using generalized input streams and output streams.
\(\bullet\) A large chapter introduces to CLOS, the Common Lisp Object System. This extension to Common Lisp is based on generic functions, multiple inheritance, declarative method combination, and a meta object protocol. Though quite complete and clear this part appears as a state of the art promising further development.
\(\bullet\) The condition system offers a general and flexible mechanism for handling errors.
\(\bullet\) A pretty printing facility provides control on pretty printing specifications: margin, indent, etc.….
Each of these chapters bears the signature of its authors, and G. Steele insists on the collective aspects of this work, done by the X3J13 ANSI committee. When reading this considerable work, some people will regret the increasing distance from pure functional programming. Clearly the purpose is to realize a programming tool bearing the comparison with the most powerful ones, in efficiency as well as in expressiveness and comfort, and this book gives one full confidence in the success.
Reviewer: N.Bernard


68-01 Introductory exposition (textbooks, tutorial papers, etc.) pertaining to computer science
68N15 Theory of programming languages