"Common Lisp: A Gentle Introduction to Symbolic Computing" by David Touretzky.

This is not only my favorite Lisp book, but my favorite programming book ever. I have been through quite a few books, but I have never encountered an easier book on programming. At first I couldn't tell if it is easy because of Lisp or the book, but as I went along, I think it is a combination of both. SICP is a bit too abstract for a beginner and PCL is pretty much practical for those that know how to program already. Touretzky's book is a good in-between. ANSI Common Lisp, isn't too bad, but some of his example codes aren't easy for a beginner. Also, there are no answers to the exercises (except an unofficial one online). Anyhoo, unlike most new Lisp people that were converted by PCL, Touretzky's book converted me to Lisp.

Seanner27 wrote:Personally I am finding chapter 24 in PCL to be almost impossible to understand. In comparison, I thought SICP was pretty easy until the latter half where it required a think-while-reading approach instead of just reading it like a novel and solving examples as they came up. Except the one where you had to make a nested table and the functions ended up like (set-car! (set-cdr! (set-car! (car (cdr (car lol)))) omg) rofl) -- that one was tricky to debug.

The problem for me is that PCL went from the early chapters:a very easy this is a function to slightly more complex this is a macro which could one day be a function

to let's take a break and talk about lists, CLOS, conditions, etc. without gaining any real experience using the language or getting better with it

to now everything is suddenly written in macros that write macros (using hardly used macros at that point in the book such as with-slots and eval-when) which may be contained in classes that have inherited macros from other macro-generated classes..................................

At no point was it ever clear what code might actually be executed at run-time (or load time or compile time or interpreted time or fun time or wtf time). Now of course there is macroexpand-1 which I used as much as possible, and in the very beginning of the chapter it was fairly obvious what was going on. I in fact jumped ahead and wrote the macro to generate the first version of define-binary-class except for not knowing how to convert a symbol to a keyword. But after that the chapter gets pretty ridiculous.

Maybe there is like a 175 IQ requirement to use LISP, and I seem to have fallen short of it.

...

I'm relieved to see I'm not the only person who felt like this. Not just Chapter 24, but I can tell you from memory the exact page number - p. 324 - where my comprehension slowly grinds to halt and I'm left in a daze. I first started reading PCL over two years ago, and I've never gotten past this point, despite many attempts, and decided to go on to other books like SICP and "On Lisp."

I suspect that a lot of the material in PCL was not written from the beginning as instructional text, but rather adapted from code that the author had previously written for a personal project. And the adaptation was very poor, IMO. The whole chapter just dumps a huge load of complex code on the reader without ever actually showing how it works in action (until later chapters). It would be much better to start out with a simple defun'ed library, then show where it's inflexible, and go step by step, extending it (through macros, CLOS, tags, etc.) as needed.

A lot of material in PCL gave me the impression that the author just wanted to show off how cool he is, and unfortunately that makes for poor instruction.