I definitely agree that there are a few parts of the book which could be re-ordered so that you could always play with the exercises right away without reading ahead. Really good advice for someone about to start is to explore ahead before getting bogged down in the exercises for a particular section, like the metacircular interpreter and the compiler. I think the end of Chapter 2 also requires some destructive put/get functions which aren't introduced until Chapter 3.
I'm reading Christian Queinnec's Lisp in Small Pieces now, and I think it's a great next book after SICP. It picks up right away with a metacircular evaluator very similar to the first one in Chapter 4, but diverges from SICP to explore different semantics, like Lisp-1 vs Lisp-2, dynamic variables, exceptions and control flow with catch/throw and continuations. Later chapters address macros and compilers I think one to bytecode and another to C.
It's very well written and the translation from French is clear if a little bit flowery. Highly recommended, but watch out for the Scheme code from the author's site. I don't think it's been touched since the early to mid 90s and I had a rough time trying to get it to run in any "modern" Scheme. I'm just translating the code as I go to run in Racket, which is much easier than trying to figure out what a thousand line Makefile does, or re-write some strange non-hygienic macros. If someone has advice for running the LiSP code, please speak up!
I'm reading Christian Queinnec's Lisp in Small Pieces now, and I think it's a great next book after SICP. It picks up right away with a metacircular evaluator very similar to the first one in Chapter 4, but diverges from SICP to explore different semantics, like Lisp-1 vs Lisp-2, dynamic variables, exceptions and control flow with catch/throw and continuations. Later chapters address macros and compilers I think one to bytecode and another to C.
It's very well written and the translation from French is clear if a little bit flowery. Highly recommended, but watch out for the Scheme code from the author's site. I don't think it's been touched since the early to mid 90s and I had a rough time trying to get it to run in any "modern" Scheme. I'm just translating the code as I go to run in Racket, which is much easier than trying to figure out what a thousand line Makefile does, or re-write some strange non-hygienic macros. If someone has advice for running the LiSP code, please speak up!
http://pagesperso-systeme.lip6.fr/Christian.Queinnec/WWW/LiS...