Contents

目次

Foreword 序言
Preface to the Second Edition 第2版への前書き
Preface to the First Edition 第1版への前書き
Acknowledgments 謝辞
1  Building Abstractions with Procedures 1 手続きを使って抽象概念を組み立てる
1.1  The Elements of Programming 1 プログラミングの要素
1.1.1  Expressions 1.1.1 式
1.1.2  Naming and the Environment 1.1.2 名付けと環境
1.1.3  Evaluating Combinations 1.1.3 コンビネーションを評価する
1.1.4  Compound Procedures 1.1.4 複合的手続き
1.1.5  The Substitution Model for Procedure Application 1.1.5 手続き適用のための代入モデル
1.1.6  Conditional Expressions and Predicates 1.1.6 条件付きの式と述語
1.1.7  Example: Square Roots by Newton's Method 1.1.7 例: ニュートン法による二乗根
1.1.8  Procedures as Black-Box Abstractions 1.1.8 ブラック・ボックス的な抽象としての手続き
1.2  Procedures and the Processes They Generate 1.2 手続きと、手続きが生成するプロセス
1.2.1  Linear Recursion and Iteration 1.2.1 線形的な再帰と反復
1.2.2  Tree Recursion 1.2.2 木構造再帰
1.2.3  Orders of Growth 1.2.3 増大のオーダ
1.2.4  Exponentiation 1.2.4 冪乗
1.2.5  Greatest Common Divisors 1.2.5 最大公約数
1.2.6  Example: Testing for Primality 1.2.6 例: 素数性を調べる
1.3  Formulating Abstractions with Higher-Order Procedures 1.3 高階手続きを使って抽象概念を定式化する
1.3.1  Procedures as Arguments 1.3.1 実引数としての手続き
1.3.2  Constructing Procedures Using Lambda 1.3.2 lambda を使って手続きを構築する
1.3.3  Procedures as General Methods 1.3.3 一般的な方法としての手続き
1.3.4  Procedures as Returned Values 1.3.4 返り値としての手続き
2  Building Abstractions with Data 2 データを使って抽象概念を組み立てる
2.1  Introduction to Data Abstraction 2.1 データ抽象化序論
2.1.1  Example: Arithmetic Operations for Rational Numbers 2.1.1 例: 有理数に対する算術演算
2.1.2  Abstraction Barriers 2.1.2 抽象化の防壁
2.1.3  What Is Meant by Data? 2.1.3 データとはどういう意味なのか?
2.1.4  Extended Exercise: Interval Arithmetic 2.1.4 発展的練習問題: 区間算術
2.2  Hierarchical Data and the Closure Property 2.2 階層的データと閉包特性
2.2.1  Representing Sequences 2.2.1 列を表現する
2.2.2  Hierarchical Structures 2.2.2 階層的構造
2.2.3  Sequences as Conventional Interfaces 2.2.3 従来のインタフェイスとしての列
2.2.4  Example: A Picture Language 2.2.4 例: お絵描き言語
2.3  Symbolic Data 2.3 記号的データ
2.3.1  Quotation 2.3.1 引用
2.3.2  Example: Symbolic Differentiation 2.3.2 例: 記号微分
2.3.3  Example: Representing Sets 2.3.3 例: 集合を表現する
2.3.4  Example: Huffman Encoding Trees 2.3.4 例: ハフマン符号化木
2.4  Multiple Representations for Abstract Data 2.4 抽象的データに対する複数の表現
2.4.1  Representations for Complex Numbers 2.4.1 複素数の表現
2.4.2  Tagged data 2.4.2 タグ付けされたデータ
2.4.3  Data-Directed Programming and Additivity 2.4.3 データ指向プログラミングと加法性
2.5  Systems with Generic Operations 2.5 総称的演算を使ったシステム
2.5.1  Generic Arithmetic Operations 2.5.1 総称的な算術演算
2.5.2  Combining Data of Different Types 2.5.2 異なる型のデータを結合する
2.5.3  Example: Symbolic Algebra 2.5.3 例: 記号代数
3  Modularity, Objects, and State 3 モジュール性とオブジェクトと状態
3.1  Assignment and Local State 3.1 代入と局所状態
3.1.1  Local State Variables 3.1.1 局所的状態変数
3.1.2  The Benefits of Introducing Assignment 3.1.2 代入を導入することの利点
3.1.3  The Costs of Introducing Assignment 3.1.3 代入を導入するすることの対価
3.2  The Environment Model of Evaluation 3.2 評価についての環境モデル
3.2.1  The Rules for Evaluation 3.2.1 評価用規則
3.2.2  Applying Simple Procedures 3.2.2 簡単な手続きを適用する
3.2.3  Frames as the Repository of Local State 3.2.3 局所状態の置き場としてのフレーム
3.2.4  Internal Definitions 3.2.4 内部定義
3.3  Modeling with Mutable Data 3.3 変更可能なデータをともなうモデル化
3.3.1  Mutable List Structure 3.3.1 変更可能なリスト構造
3.3.2  Representing Queues 3.3.2 キューを表現する
3.3.3  Representing Tables 3.3.3 テーブルを表現する
3.3.4  A Simulator for Digital Circuits 3.3.4 ディジタル回路のシミュレータ
3.3.5  Propagation of Constraints 3.3.5 制約の伝播
3.4  Concurrency: Time Is of the Essence 3.4 並行性: 時間は本質的なものである
3.4.1  The Nature of Time in Concurrent Systems 3.4.1 並行システムにおける時間の本質
3.4.2  Mechanisms for Controlling Concurrency 3.4.2 並行性を制御するための仕組み
3.5  Streams 3.5 ストリーム
3.5.1  Streams Are Delayed Lists 3.5.1 ストリームは遅延されたリストだ
3.5.2  Infinite Streams 3.5.2 無限ストリーム
3.5.3  Exploiting the Stream Paradigm 3.5.3 ストリーム・パラダイムを使い倒す
3.5.4  Streams and Delayed Evaluation 3.5.4 ストリームと遅延評価
3.5.5  Modularity of Functional Programs and Modularity of Objects 3.5.5 関数型プログラムのモジュール性とオブジェクトのモジュール性
4  Metalinguistic Abstraction 4 メタ言語的な抽象化
4.1  The Metacircular Evaluator 4.1 メタ循環的な評価器
4.1.1  The Core of the Evaluator 4.1.1 評価器の核
4.1.2  Representing Expressions 4.1.2 式を表現する
4.1.3  Evaluator Data Structures 4.1.3 評価器のデータ構造
4.1.4  Running the Evaluator as a Program 4.1.4 評価器をプログラムとして実行する
4.1.5  Data as Programs 4.1.5 プログラムとしてのデータ
4.1.6  Internal Definitions 4.1.6 内部定義
4.1.7  Separating Syntactic Analysis from Execution 4.1.7 文法的な分析を実行から切り離す
4.2  Variations on a Scheme -- Lazy Evaluation 4.2 Schemeの変種——遅延評価
4.2.1  Normal Order and Applicative Order 4.2.1 正規順と適用順
4.2.2  An Interpreter with Lazy Evaluation 4.2.4 遅延評価を使うインタプリタ
4.2.3  Streams as Lazy Lists 4.2.3 遅延リストとしてのストリーム
4.3  Variations on a Scheme -- Nondeterministic Computing 4.3 Schemeの変種——非決定的計算
4.3.1  Amb and Search 4.3.1 amb と探索
4.3.2  Examples of Nondeterministic Programs 4.3.2 非決定的プログラムの例
4.3.3  Implementing the Amb Evaluator 4.3.3 amb 評価器を実装する
4.4  Logic Programming 4.4 論理プログラミング
4.4.1  Deductive Information Retrieval 4.4.1 演繹的な情報検索
4.4.2  How the Query System Works 4.4.2 クエリ・システムはどう動くのか
4.4.3  Is Logic Programming Mathematical Logic? 4.4.3 論理プログラミングは数学的論理なのか?
4.4.4  Implementing the Query System
5  Computing with Register Machines 5 レジスタ・マシンで計算する
5.1  Designing Register Machines 5.1 レジスタ・マシンを設計する
5.1.1  A Language for Describing Register Machines 5.1.1 レジスタ・マシンを記述するための言語
5.1.2  Abstraction in Machine Design 5.1.2 マシン設計での抽象化
5.1.3  Subroutines 5.1.3 サブルーチン
5.1.4  Using a Stack to Implement Recursion 5.1.4 再帰を実装するためにスタックを使う
5.1.5  Instruction Summary 5.1.5 命令のまとめ
5.2  A Register-Machine Simulator 5.2 レジスタ・マシンのシミュレータ
5.2.1  The Machine Model 5.2.1 マシン・モデル
5.2.2  The Assembler 5.2.2 アセンブラ
5.2.3  Generating Execution Procedures for Instructions 5.2.3 命令用の実行手続きを生成する
5.2.4  Monitoring Machine Performance 5.2.4 マシン性能を監視する
5.3  Storage Allocation and Garbage Collection 5.3 記憶割り当てとガーベジ・コレクション
5.3.1  Memory as Vectors 5.3.1 ベクタとしてのメモリ
5.3.2  Maintaining the Illusion of Infinite Memory 5.3.2 無限メモリという幻影を維持する
5.4  The Explicit-Control Evaluator 5.4 明示的制御方式の評価器
5.4.1  The Core of the Explicit-Control Evaluator 5.4.1 明示的制御方式の評価器の核
5.4.2  Sequence Evaluation and Tail Recursion 5.4.2 列の評価と末尾再帰
5.4.3  Conditionals, Assignments, and Definitions 5.4.3 条件式と代入 (わりあて) と定義
5.4.4  Running the Evaluator 5.4.4 評価器を動かす
5.5  Compilation 5.5 コンパイル
5.5.1  Structure of the Compiler 5.5.1 コンパイラの構造
5.5.2  Compiling Expressions 5.5.2 式をコンパイルする
5.5.3  Compiling Combinations 5.5.3 コンビネーションをコンパイルする
5.5.4  Combining Instruction Sequences 5.5.4 命令列を結合する
5.5.5  An Example of Compiled Code
5.5.6  Lexical Addressing
5.5.7  Interfacing Compiled Code to the Evaluator
References 参考文献
List of Exercises 練習問題の一覧
Index 索引