| Contents | |
| List of Figures | |
| Preface | |
| I | Processing Simple Forms of Data | 3 |
| 1 | Students, Teachers, and Computers | 3 |
| 2 | Numbers, Expressions, Simple Programs | 5 |
| 3 | Programs are Function Plus Variable Definitions | 21 |
| 4 | Conditional Expressions and Functions | 29 |
| 5 | Symbolic Information | 46 |
| 6 | Compound Data, Part 1: Structures | 51 |
| 7 | The Varieties of Data | 79 |
| Intermezzo 1: Syntax and Semantics | 97 |
| II | Processing Arbitrarily Large Data | 117 |
| 9 | Compound Data, Part 2: Lists | 117 |
| 10 | More on Processing Lists | 137 |
| 11 | Natural Numbers | 153 |
| 12 | Composing Functions, Revisited Again | 168 |
| Intermezzo 2: List Abbreviations | 183 |
| III | More on Processing Arbitrarily Large Data | 189 |
| 14 | More Self-referential Data Definitions | 189 |
| 15 | Mutually Referential Data Definitions | 209 |
| 16 | Development through Iterative Refinement | 221 |
| 17 | Processing Two Complex Pieces of Data | 228 |
| Intermezzo 3: Local Definitions and Lexical Scope | 259 |
| IV | Abstracting Designs | 283 |
| 19 | Similarities in Definitions | 283 |
| 20 | Functions are Values | 299 |
| 21 | Designing Abstractions from Examples | 306 |
| 22 | Designing Abstractions with First-Class Functions | 319 |
| 23 | Mathematical Examples | 334 |
| Intermezzo 4: Defining Functions on the Fly | 350 |
| V | Generative Recursion | 357 |
| 25 | A New Form of Recursion | 357 |
| 26 | Designing Algorithms | 368 |
| 27 | Variations on a Theme | 381 |
| 28 | Algorithms that Backtrack | 406 |
| Intermezzo 5: The Cost of Computing and Vectors | 417 |
| VI | Accumulating Knowledge | 441 |
| 30 | The Loss of Knowledge | 441 |
| 31 | Designing Accumulator-Style Functions | 450 |
| 32 | More Uses of Accumulation | 466 |
| Intermezzo 6: The Nature of Inexact Numbers | 478 |
| VII | Changing the State of Variables | 491 |
| 34 | Memory for Functions | 491 |
| 35 | Assignment to Variables | 496 |
| 36 | Designing Functions with Memory | 507 |
| 37 | Examples of Memory Usage | 521 |
| Intermezzo 7: The Final Syntax and Semantics | 548 |
| VIII | Changing Compound Values | 573 |
| 39 | Encapsulation | 573 |
| 40 | Mutable Structures | 587 |
| 41 | Designing Functions that Change Structures | 608 |
| 42 | Equality | 637 |
| 43 | Changing Structures, Vectors, and Objects | 642 |
| Epilogue | 677 |
| Index | 683 |