My implementations of the exercises in Structure and Interpretation of Computer Programs.
I chose1 Racket as the programming language to do this, which helpfully has an sicp package nowadays for full compatibility with the Scheme variant used in the book.
I will try to go through every single exercise, but we'll see how realistic that actually is.
Otherwise, I can recommend Eli Bendersky's blogposts about SICP, and there are extensive solutions in the Scheme Wiki (although the latter contains a few arguments/back-and-forth in some places2).
- Chapter 1: Building Abstractions with Procedures
- Chapter 1.1: The Elements of Programming
- Chapter 1.2: Procedures and the Processes They Generate
- Chapter 1.3: Formulating Abstractions with Higher-Order Procedures
- Chapter 2: Building Abstractions with Data
- Chapter 2.1: Introduction to Data Abstraction
- (Note: Failed Exercise 2.13 and skipped Exercise 2.16.)
- Chapter 2.2: Hierarchical Data and the Closure Property
- Chapter 2.3: Symbolic Data
- Chapter 2.4: Multiple Representations for Abstract Data
- Chapter 2.5: Systems with Generic Operations
- Chapter 2.1: Introduction to Data Abstraction
- Chapter 3: Modularity, Objects, and State
- Chapter 3.1: Assignment and Local State
- Chapter 3.2: The Environment Model of Evaluation
- Chapter 3.3: Modeling with Mutable Data
- Chapter 3.4: Concurrency: Time Is of the Essence
- Chapter 3.5: Streams
- Chapter 4: Metalinguistic Abstraction
- Chapter 4.1: The Metacircular Evaluator
- Chapter 4.2: Variations on a Scheme — Lazy Evaluation
- Chapter 4.3: Variations on a Scheme — Nondeterministic Computing
- Chapter 4.4: Logic Programming
- Chapter 5: Computing with Register Machines
- Chapter 5.1: Designing Register Machines
- Chapter 5.2: A Register-Machine Simulator
- Chapter 5.3: Storage Allocation and Garbage Collection
- Chapter 5.4: The Explicit-Control Evaluator
- Chapter 5.5: Compilation