General Comments
For the most part, Graham's Lisp code is maintainable and portable. Function definitions are short and well-motivated. Exceptions are noted below.
However, there are a few areas where Graham's coding style should not be considered typical:
- Naming: Like Unix, Graham likes short names, often to the point of crypticness. See my notes on naming for a better way.
- Conditionals: Graham uses
if
rather thancond
, even when usingif
leads to nestedif
's or embeddedprogn
's. - Loops: Graham avoids
loop
, because it is so easily misused and different from the functional programming style. Sometimes, however,loop
is the clearest simplest way to write something. - Preference for recursion over iteration, even if it might lead to code that causes stack overflows on very long lists.
Here are more detailed comments on particular chapters: