Structure and interpretation of computer programs, second edition
By: Harold Abelson and Gerald Jay Sussman, with Julie Sussman ; foreword by Alan J. Perlis.
Contributors: Sussman, Gerald Jay.; Sussman, Julie.
Edition: Second Edition
Publisher: MIT Press; McGraw-Hill
Published: 1996
Place of publication: Cambridge, Mass; New York
Language: eng
Number of pages: 883
Copyright date: ©1996 by The Massachusetts Institute of Technology
Subjects: Computer programming.; LISP (Computer program language)
Notes: This edition emphasizes several new themes. The most important of these is the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming, lazy evaluation, and nondeterministic programming. Includes new sections on concurrency and nondeterminism.
Table of contents: label: Foreword
title: Foreword; label: Preface
title: Preface to the First Edition; label: Preface
title: Preface to the Second Edition; label: Acknowledgements
title: Acknowledgements; label: 1
title: Building Abstractions with Procedures; label: 1.1
title: The Elements of Programming; label: 1.1.1
title: Expressions; label: 1.1.2
title: Naming and the Environment; label: 1.1.3
title: Evaluating Combinations; label: 1.1.4
title: Compound Procedures; label: 1.1.5
title: The Substitution Model for Procedure Application; label: 1.1.6
title: Conditional Expressions and Predicates; label: 1.1.7
title: Example: Square Roots by Newton's Method; label: 1.1.8
title: Procedures as Black Box Abstractions; label: 1.2
title: Procedures and the Processes They Create; label: 1.2.1
title: Linear Recursion and Iteration; label: 1.2.2
title: Tree Recursion; label: 1.2.3
title: Orders of Growth; label: 1.2.4
title: Exponentiation; label: 1.2.5
title: Greatest Common Divisors; label: 1.2.6
title: Example: Testing for Primality; label: 1.3
title: Formulating Abstractions with Higher-Order Procedures; label: 1.3.1
title: Procedures as Arguments; label: 1.3.2
title: Constructing Procedures Using Lambda; label: 1.3.3
title: Procedures as General Methods; label: 1.3.4
title: Procedures as Returned Values; label: 2
title: Building Abstractions with Data; label: 2.1
title: Introduction to Data Abstraction; label: 2.1.1
title: Example: Arithmetic Operations for Rational Numbers; label: 2.1.2
title: Abstraction Barriers; label: 2.1.3
title: What Is Meant By Data?; label: 2.1.4
title: Extended Exercise: Interval Arithmetic; label: 2.2
title: Hierarchical Data and the Closure Property; label: 2.2.1
title: Representing Sequences; label: 2.2.2
title: Hierarchical Structures; label: 2.2.3
title: Sequences as Conventional Interfaces; label: 2.2.4
title: Example: A Picture Language; label: 2.3
title: Symbolic Data; label: 2.3.1
title: Quotation; label: 2.3.2
title: Example: Symbolic Differentiation; label: 2.3.3
title: Example: Representing Sets; label: 2.3.4
title: Example: Huffman Encoding Trees; label: 2.4
title: Multiple Representations for Abstract Data; label: 2.4.1
title: Representations for Complex Numbers; label: 2.4.2
title: Tagged data; label: 2.4.3
title: Data-Directed Programming and Additivity; label: 2.5
title: Systems with Generic Operations; label: 2.5.1
title: Generic Arithmetic Operations; label: 2.5.2
title: Combining Data of Different Types; label: 2.5.3
title: Example: Symbolic Algebra; label: 3
title: Modularity, Objects, and State; label: 3.1
title: Assignment and Local State; label: 3.1.1
title: Local State Variables; label: 3.1.2
title: The Benefits of Introducing Assigment; label: 3.1.3
title: The Costs of Introducing Assignment; label: 3.2
title: The Environment Model of Evaluation; label: 3.2.1
title: The Rules for Evaluation; label: 3.2.2
title: Applying Simple Procedures; label: 3.2.3
title: Frames as the Repository of Local State; label: 3.2.4
title: Internal Definitions; label: 3.3
title: Modeling with Mutable Data; label: 3.3.1
title: Mutable List Structures; label: 3.3.2
title: Representing Queues; label: 3.3.3
title: Representing Tables; label: 3.3.4
title: A Simulator for Digital Circuits; label: 3.3.5
title: Propogation of Constraints; label: 3.4
title: Concurrency: Time Is of the Essence; label: 3.4.1
title: The Nature of Time in Concurrent Systems; label: 3.4.2
title: Mechanisms for Controlling Concurrency; label: 3.5
title: Streams; label: 3.5.1
title: Streams Are Delayed Lists; label: 3.5.2
title: Infinite Streams; label: 3.5.3
title: Exploiting the Stream Paradigm; label: 3.5.4
title: Streams and Delayed Evaluation; label: 3.5.5
title: Modularity of Functional Programs and Modularity of Objects; label: 4
title: Metalinguistic Abstraction; label: 4.1
title: The Metacircular Evaluator; label: 4.1.1
title: The Core of the Evaluator; label: 4.1.2
title: Representing Expressions; label: 4.1.3
title: Evaluator Data Structures; label: 4.1.4
title: Running the Evaluator as a Program; label: 4.1.5
title: Data as Programs; label: 4.1.6
title: Internal Definitions; label: 4.1.7
title: Separating Syntactic Analysis from Execution; label: 4.2
title: Variations on a Scheme—Lazy Evaluation; label: 4.2.1
title: normal Order and Applicative Order; label: 4.2.2
title: An Interpreter with Lazy Evaluation; label: 4.2.3
title: Streams as Lazy Lists; label: 4.3
title: Variations on a Scheme—Nondeterministic Computing; label: 4.3.1
title: Amb and Search; label: 4.3.2
title: Examples of Nondeterministic Programs; label: 4.3.3
title: Implementing the Amb Evaluator; label: 4.4
title: Logic Programming; label: 4.4.1
title: Deductive Information Retrieval; label: 4.4.2
title: How the Query System Works; label: 4.4.3
title: Is Logic Programming Mathematical Logic?; label: 4.4.4
title: Implementing the Query System; label: 5
title: Computing with Register Machines; label: 5.1
title: Designing Register Machines; label: 5.1.1
title: A Language for Describing Register Machines; label: 5.1.2
title: Abstraction in Machine Design; label: 5.1.3
title: Subroutines; label: 5.1.4
title: Using a Stack to Implement Recursion; label: 5.1.5
title: Instruction Summary; label: 5.2
title: A Register-Machine Simulator; label: 5.2.1
title: The Machine Model; label: 5.2.2
title: The Assembler; label: 5.2.3
title: Generating Execution Procedures for Instructions; label: 5.2.4
title: Monitoring Machine Performance; label: 5.3
title: Storage Allocation and Garbage Collection; label: 5.3.1
title: Memory as Vectors; label: 5.3.2
title: Maintaining the Illusion of Infinite Memory; label: 5.4
title: The Explicit-Control Evaluator; label: 5.4.1
title: The Core of the Explicit-Control Evaluator; label: 5.4.2
title: Sequence Evaluation and Tail Recursion; label: 5.4.3
title: Conditionals, Assignments, and Definitions; label: 5.4.4
title: Running the Evaluator; label: 5.5
title: Compilation; label: 5.5.1
title: Structure of the Compiler; label: 5.5.2
title: Compiling Expressions; label: 5.5.3
title: Compiling Combinations; label: 5.5.4
title: Combining Instruction Sequences; label: 5.5.5
title: An Example of Compiled Code; label: 5.5.6
title: Lexical Addressing; label: 5.5.7
title: Interfacing Compiled Code to the Evaluator; label: References
title: References; label: List of Exercises
title: List of Exercises; label: Index
title: Index