A Review of ``ANSI Common Lisp'' by Paul Graham

The book being reviewed is ``ANSI Common Lisp'' by Paul Graham (ISBN 0-13-370875-6).

Information concerning it may be found here:
http://paulgraham.com/acl.html

I didn't learn Common Lisp by reading this book, and one having good foreknowledge of Common Lisp is
unlikely to get much value from most of the book.  I primarily use this book as a physical resource,
when the interactive environment is insufficient and I don't care to use the HyperSpec for a review.

The first chapter does well at explaining how Common Lisp is fundamentally better-suited to problem-
solving than other languages, through more constructs and also explaining how its interactive nature
allows a different manner of program construction and design.

The following chapters explain increasingly more of the language with nice code examples and graphs.
I consider his style unusual or poor at parts, but this is justified by being intended for education
and parts of the language not yet being explained, along with personal preferences.  I may choose to
later criticize his style, however.

I will critique how some of his examples could've been quite easily modified to better follow a nice
Lisp style and how the ray-tracer sidesteps the true domain complexity, it merely generating a basic
file to be viewed with another program.

The thirteenth chapter is where the introduction to the language ends, covering speed optimizations.
I agree with him, in that algorithmic optimization is a better use of time.  He doesn't mention that
tail-call optimization isn't guaranteed by Common Lisp, which is poor.  In general, this chapter may
be worth taking a read at every now and again, if only because it covers an interesting topic.

In chapter fourteen more advanced topics are covered, but I find this conflicts with the thirteenth,
which covers advanced topics on its own.  In section 14.2, READ-SEQUENCE isn't mentioned, so this is
an error.  For section 14.6, I'd think conditions should've been given more importance than they're.

The last three chapters are more examples of varying interest.  The first appendix covers some basic
debugging advice.  The second appendix covers a subset of Common Lisp in itself and would be of more
interest without his stylistic oddities and unnecessary name prefixing.  The third appendix is nice,
if the reader is like me and learned Common Lisp with pre-standardization material and wants an easy
note of the changes, although I don't use this, having long internalized these.  That final appendix
is the most valuable part of the book for me, and I've it bookmarked; this is the language reference
and can be rather nice when necessary if one keeps it handy, and this is my main use of the book.

I bought a used copy of this book for ten dollars or so and I don't recommend paying more than that.