Preface |
The Abstract Rational Outlook / Chapter 1: |
Abstract Computation |
Rational Thought |
Human Psychology |
Mythological Language |
Literate Programming |
Hand-Crafted Software |
Technical Programming |
A Grab Bag of Computational Models / Chapter 2: |
Abstract and Virtual Machines |
State Machines |
State Machines in Action |
Turing Machine |
Non-Deterministic Machines |
Von Neumann Machine |
Stack Machine |
Register Machine |
Analogue Machine |
Cellular Automata |
Unorthodox Models |
The Game of Life |
The Modern Desktop Computer |
Aspects of Virtual Machines |
Aspects of Programming |
Register Indirection |
Pure Expression Substitution |
Lists Pure and Linked |
Pure String Substitution |
The Face Value of Numerals |
Solving Equations |
Pure Unification |
Equality of Expressions |
Equational Reasoning |
Unification Reduction |
Code Reduction |
Programming With Logic |
Negation in Logic Programming |
Impure Lambda Calculus |
Pure Lambda Calculus |
Pure Lambda Arithmetic |
Pure Lambda Flow Control |
S-K Combinators |
Some Formal Technology / Chapter 3: |
The Ellipsis Is Not a Definition |
The Summation Operator |
Propositional Calculus |
Boolean Algebra |
Predicate Calculus |
Formal Mathematical Models |
The Formal State Machine |
Several Types of Networks |
Informal Petri Nets |
Formal Turing Machine |
The Table-Driven State Machine |
Factors of Graphs |
Products of Graphs |
Constructive Numerics |
Prime Programs |
Showing that Factorial Works |
Reasoning About Code |
Logical Conditions |
Limitations on Exact Knowledge / Chapter 4: |
Finite-State Limitations |
N log N sorting |
Russell's Paradox |
Pure Lambda Paradoxes |
Godel's Theorem |
Non-Computability |
Solving Polynomials |
Churche's Thesis |
Algorithmic Complexity |
P and NP |
NP completeness |
Turing Test |
Natural Language Processing |
The Computable Reals |
The Diagonal Argument |
Some Orthodox Languages / Chapter 5: |
C Pointers to Functions |
Taking C on Face Value |
Functions and Other Data in C |
The C Preprocessor |
C Functions are Data Again |
Java Code |
Pointer Casting |
The Object Data Type |
Manual Objects |
Inheritance and Dynamic Type |
CODASYL and Objects |
Typecasting |
The Concept of Type |
Type-Checking |
Subtypes and Programming |
New Datatypes |
Scheme Code |
Declarative and Imperative |
Sorting with Pure Substitution |
Fast Sorting in Haskell |
Logic in Prolog |
Functions in Prolog |
Arithmetic in Prolog |
Meta-Logic in Prolog |
What Is HTML Code? |
Illogical markup language |
HTML Forgive and Forget |
Expanding Beyond Recognition |
Arithmetic Computation / Chapter 6: |
Natural Arithmetic |
Modulo Arithmetic |
Integer Arithmetic |
Rational Arithmetic |
Complex Arithmetic |
Exact Arithmetic |
Showing That a Power Loop Works |
When Is a Proof Not a Proof? |
Real-Valued Memory |
Cellular Matrix Multiplication |
Repetitive Computation / Chapter 7: |
The Use of Recursion |
Doing Without the While Loop |
Defining the Generic While-Loop |
Design of the Power Function |
Powers by Multiplication |
Computing Powers by Squaring |
Language or Algorithm? |
Repetitive Program Design |
Recursive Code Compilation |
Functions as Data |
Lambda Expressions in Java |
The Y-combinator definition |
Y-combinator factorial |
Y-combinator Fibonacci |
Temporal Interaction / Chapter 8: |
Virtual Interaction |
Incorruptible Operations |
Temporal Computing |
Multi-Threaded Code |
Graphs of State Machines |
Direct Thread Composition |
Concurrent Thread Interference |
Control Structures |
Thread Point of Execution |
The Transition Network |
High-Level Interference |
Incorruptible Commands Again |
Thread Interaction |
Pure String Interaction |
Showing That a Parser Works |
Mutual Exclusion |
Good Mutual Exclusion |
A Partial Mutex Protocol |
Guarded Commands |
Blocking Commands |
Hardware Assistance |
Proving That a Protocol Works |
Two Partial Exclusion Protocols |
The Peterson Protocol |
The Decker Protocol |
Container Datatypes / Chapter 9: |
Abstract Arrays |
Pure Containers |
Generic Maps |
Showing That Infinite Lists Work |
Generic Lists |
Computing with Infinite Lists |
Sequence Builder |
Infinite Lists in Haskell |
Infinite Lists in Scheme |
Primitive List Recursion |
Appendices |
End notes |
Bibliography |
Glossary |
Index |
Preface |
The Abstract Rational Outlook / Chapter 1: |
Abstract Computation |
Rational Thought |
Human Psychology |
Mythological Language |