A mostly-complete implementation of the interpreters from sections 4.1 and 4.2 of Structure and Interpretation of Computer Programs.
The original interpreter (section 4.1) is in the master
branch, and the lazy evaluator of
section 4.2 in in the lazy
branch.
I implemented it in Racket and experimented with a few things I hadn't used before (e.g. Racket's classes and objects).
It doesn't implement everything covered in the book, in particular quote
is missing.