(sarabander.github.io) Structure and Interpretation of Computer Programs, 2e: Top
ROAM_REFS: https://sarabander.github.io/sicp/html/index.xhtml
Main node: (sarabander.github.io) Structure and Interpretation of Computer Programs, 2e.
- Structure and Interpretation of Computer Programs, Second Edition
Unofficial Texinfo Format 2.andresraba6.6
Harold Abelson and Gerald Jay Sussman with Julie Sussman, foreword by Alan J. Perlis
(sarabander.github.io) SICP, 2e: Chapter 1 Building Abstractions with Procedures
ROAM_REFS: https://sarabander.github.io/sicp/html/Chapter-1.xhtml
(sarabander.github.io) SICP, 2e: 1.1 The Elements of Programming
ROAM_REFS: https://sarabander.github.io/sicp/html/1_002e1.xhtml
(sarabander.github.io) SICP, 2e: 1.2 Procedures and the Processes They Generate
ROAM_REFS: https://sarabander.github.io/sicp/html/1_002e2.xhtml
(sarabander.github.io) SICP, 2e: 1.3 Formulating Abstractions with Higher-Order Procedures
ROAM_REFS: https://sarabander.github.io/sicp/html/1_002e3.xhtml
(sarabander.github.io) SICP, 2e: Chapter 2 Building Abstractions with Data
ROAM_REFS: https://sarabander.github.io/sicp/html/Chapter-2.xhtml
(sarabander.github.io) SICP, 2e: 2.1 Introduction to Data Abstraction
ROAM_REFS: https://sarabander.github.io/sicp/html/2_002e1.xhtml
(sarabander.github.io) SICP, 2e: 2.2 Hierarchical Data and the Closure Property
ROAM_REFS: https://sarabander.github.io/sicp/html/2_002e2.xhtml
(sarabander.github.io) SICP, 2e: 2.2, Footnote 72
ROAM_REFS: https://sarabander.github.io/sicp/html/2_002e2.xhtml#FOOT72
^{72} The use of the word “closure” here comes from abstract algebra, where a set of elements is said to be closed under an operation if applying the operation to elements in the set produces an element that is again an element of the set. The Lisp community also (unfortunately) uses the word “closure” to describe a totally unrelated concept: A closure is an implementation technique for representing procedures with free variables. We do not use the word “closure” in this second sense in this book.
(sarabander.github.io) SICP, 2e: 2.3 Symbolic Data
ROAM_REFS: https://sarabander.github.io/sicp/html/2_002e3.xhtml
(sarabander.github.io) SICP, 2e: 2.4 Multiple Representations for Abstract Data
ROAM_REFS: https://sarabander.github.io/sicp/html/2_002e4.xhtml
(sarabander.github.io) SICP, 2e: 2.5 Systems with Generic Operations
ROAM_REFS: https://sarabander.github.io/sicp/html/2_002e5.xhtml
(sarabander.github.io) SICP, 2e: 2.5, Footnote 118
ROAM_REFS: https://sarabander.github.io/sicp/html/2_002e5.xhtml#FOOT118
This statement, which also appears in the first edition of this book, is just as true now as it was when we wrote it twelve years ago. Developing a useful, general framework for expressing the relations among different types of entities (what philosophers call “ontology”) seems intractably difficult. The main difference between the confusion that existed ten years ago and the confusion that exists now is that now a variety of inadequate ontological theories have been embodied in a plethora of correspondingly inadequate programming languages. For example, much of the complexity of object-oriented programming languages—and the subtle and confusing differences among contemporary object-oriented languages—centers on the treatment of generic operations on interrelated types. Our own discussion of computational objects in Chapter 3 avoids these issues entirely. Readers familiar with object-oriented programming will notice that we have much to say in chapter 3 about local state, but we do not even mention “classes” or “inheritance.” In fact, we suspect that these problems cannot be adequately addressed in terms of computer-language design alone, without also drawing on work in knowledge representation and automated reasoning.
(sarabander.github.io) SICP, 2e: Chapter 3 Modularity, Objects, and State
ROAM_REFS: https://sarabander.github.io/sicp/html/Chapter-3.xhtml
(sarabander.github.io) SICP, 2e: 3.1 Assignment and Local State
ROAM_REFS: https://sarabander.github.io/sicp/html/3_002e1.xhtml
(sarabander.github.io) SICP, 2e: 3.2 The Environment Model of Evaluation
ROAM_REFS: https://sarabander.github.io/sicp/html/3_002e2.xhtml
(sarabander.github.io) SICP, 2e: 3.3 Modeling with Mutable Data
ROAM_REFS: https://sarabander.github.io/sicp/html/3_002e3.xhtml
(sarabander.github.io) SICP, 2e: 3.3, Footnote 148
ROAM_REFS: https://sarabander.github.io/sicp/html/3_002e3.xhtml#FOOT148
The subtleties of dealing with sharing of mutable data objects reflect the underlying issues of “sameness” and “change” that were raised in 3.1.3. We mentioned there that admitting change to our language requires that a compound object must have an “identity” that is something different from the pieces from which it is composed. In Lisp, we consider this “identity” to be the quality that is tested by
eq?, i.e., by equality of pointers. Since in most Lisp implementations a pointer is essentially a memory address, we are “solving the problem” of defining the identity of objects by stipulating that a data object “itself” is the information stored in some particular set of memory locations in the computer. This suffices for simple Lisp programs, but is hardly a general way to resolve the issue of “sameness” in computational models.
(sarabander.github.io) SICP, 2e: 3.4 Concurrency: Time Is of the Essence
ROAM_REFS: https://sarabander.github.io/sicp/html/3_002e4.xhtml
(sarabander.github.io) SICP, 2e: 3.5 Streams
ROAM_REFS: https://sarabander.github.io/sicp/html/3_002e5.xhtml
(sarabander.github.io) SICP, 2e: Chapter 4 Metalinguistic Abstraction
ROAM_REFS: https://sarabander.github.io/sicp/html/Chapter-4.xhtml
(sarabander.github.io) SICP, 2e: 4.1 The Metacircular Evaluator
ROAM_REFS: https://sarabander.github.io/sicp/html/4_002e1.xhtml
(sarabander.github.io) SICP, 2e: 4.2 Variations on a Scheme — Lazy Evaluation
ROAM_REFS: https://sarabander.github.io/sicp/html/4_002e2.xhtml
(sarabander.github.io) SICP, 2e: 4.3 Variations on a Scheme — Nondeterministic Computing
ROAM_REFS: https://sarabander.github.io/sicp/html/4_002e3.xhtml
(sarabander.github.io) SICP, 2e: 4.4 Logic Programming
ROAM_REFS: https://sarabander.github.io/sicp/html/4_002e4.xhtml
(sarabander.github.io) SICP, 2e: Chapter 5 Computing with Register Machines
ROAM_REFS: https://sarabander.github.io/sicp/html/Chapter-5.xhtml
(sarabander.github.io) SICP, 2e: 5.1 Designing Register Machines
ROAM_REFS: https://sarabander.github.io/sicp/html/5_002e1.xhtml
(sarabander.github.io) SICP, 2e: 5.2 A Register-Machine Simulator
ROAM_REFS: https://sarabander.github.io/sicp/html/5_002e2.xhtml
(sarabander.github.io) SICP, 2e: 5.3 Storage Allocation and Garbage Collection
ROAM_REFS: https://sarabander.github.io/sicp/html/5_002e3.xhtml
(sarabander.github.io) SICP, 2e: 5.4 The Explicit-Control Evaluator
ROAM_REFS: https://sarabander.github.io/sicp/html/5_002e4.xhtml
(sarabander.github.io) SICP, 2e: 5.5 Compilation
ROAM_REFS: https://sarabander.github.io/sicp/html/5_002e5.xhtml
(sarabander.github.io) SICP, 2e: References
ROAM_REFS: https://sarabander.github.io/sicp/html/References.xhtml
(sarabander.github.io) SICP, 2e: Term Index
ROAM_REFS: https://sarabander.github.io/sicp/html/Term-Index.xhtml
** Term Index
Any inaccuracies in this index may be explained by the fact that it has been prepared with the help of a computer. ---Donald E. Knuth, Fundamental Algorithms\\ (Volume 1 of The Art of Computer Programming)