features as well. There is a whole chapter on input/output functions, including the
use of streams, files, and pathnames. Another chapter explains common Lisp's use
of property lists, arrays and vectors, hash tables, and structures. Fundamental
control structures such as catch, throw, unwind-protect, and the iterative constructs
are also explained. Other important and practical features taught include packages,
optional and rest and keyword arguments, returning multiple values. There's also a
chapter on what a Lisp compiler is, and how to use it, including the use of compiler
A particularly valuable chapter is the one on Lisp macros. The book explains what
macros are for, and introduces defmacro and backquote, the modern macro-writing
tools provided by Common Lisp. It goes on to explain macro-defining macros, and
how to use nested backquotes. It demonstrates how defstruct can be implemented
using macros. This explanation is sorely needed, because while it's easy to explain
the basic mechanism of macros, it's much harder to explain how to effectively make
use of macros.
A Programmeris Guide to Common Lisp starts from scratch, assuming that the
reader has no prior knowledge of Lisp. Unfortunately, the introductory portion of
the book has many problems. Objects are confused with the printed representations
of objects. Terminology is not always consistent; for example, functions are
sometimes called "commands." The eq function is explained in terms of the
computer's "memory," where is ought to be explained in terms of the semantics of
the Lisp language.
On the other hand, the extensive examples provided throughout the text are very
helpful. They are extensive enough to present some of what's really interesting
about Lisp. They're also designed to teach principles of programming practice, from
style issues to the idea of abstract data types and incremental program development.
The writing is clear, and good exercises and chapter summaries are provided.
In summary, A Programmer's Guide to Common Lisp's unique value is its coverage
of modern Lisp features. It has some weaknesses as a beginner-level textbook on
Lisp, but on the whole it's one of the best Lisp textbooks available.