Structure & Interpretation of Computer Programs

Building Abstractions with Procedures

The Elements of Programming

Expressions

Naming and the Environment

Evaluating Combinations

Compound Procedures

The Substitution Model for Procedure Application

Conditional Expressions and Predicates

Example: Square Roots by Newton's Method

Procedures as Black-Box Abstractions

Procedures and the Processes They Generate

Linear Recursion and Iteration

Tree Recursion

Orders of Growth

Exponentiation

Greatest Common Divisors

Example: Testing for Primality

Formulating Abstractions with Higher-Order

Procedures as Arguments

Constructing Procedures Using Lambda

Procedures as General Methods

Procedures as Returned Values

Building Abstractions with Data

Introduction to Data Abstraction

Hierarchical Data and the Closure Property

Symbolic Data

Multiple Representations for Abstract Data

Systems with Generic Operations

Modularity, Objects, and State

Assignment and Local State

The Environment Model of Evaluation

Modeling with Mutable Data

Concurrency: Time Is of the Essence

Streams

Metalinguistic Abstraction

The Metacircular Evaluator

Variations on a Scheme -- Lazy Evaluation

Variations on a Scheme -- Nondeterministic Computing

Logic Programming

Computing with Register Machines

Designing Register Machines

A Register-Machine Simulator

Storage Allocation and Garbage Collection

The Explicit-Control Evaluator

Compilation