https://courses.cs.northwestern.edu/325/readings/graham/graham-notes.html Notes on Graham's ANSI Common Lisp 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 than cond, even when using if leads to nested if's or embedded progn'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: * Chapter 2 * Chapter 3 * Chapter 4 * Chapter 5 * Chapter 6 * Chapter 7 * Chapter 8 * Chapter 9 + A data-driven ray tracer + An object-oriented ray tracer * Chapter 10 * Chapter 11 * Chapter 15 * Chapter 16 * Appendix A * Appendix D