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
cond, even when using
ifleads to nested
if's or embedded
- Loops: Graham avoids
loop, because it is so easily misused and different from the functional programming style. Sometimes, however,
loopis 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: