Index  Comments

The book being reviewed is ``ANSI Common Lisp'' by Paul Graham (ISBN 0-13-370875-6). Information concerning it may be found here.

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.