1 Konstruktion von Abstraktionen mit Prozeduren.- 1.1 Die Programmelemente.- 1.1.1 Ausdrücke.- 1.1.2 Namen und Umgebungen.- 1.1.3 Auswertung von Kombinationen.- 1.1.4 Zusammengesetzte Prozeduren.- 1.1.5 Das Substitutionsmodell für Prozeduranwendungen.- 1.1.6 Bedingte Ausdrücke und Prädikate.- 1.1.7 Beispiel: Berechnung der Quadratwurzel nach dem Newtonschen Iterationsverfahren.- 1.1.8 Prozeduren als „Black-box“-Abstraktionen.- 1.2 Prozeduren und Prozesse.- 1.2.1 Lineare Rekursion und Iteration.- 1.2.2 Baumrekursion.- 1.2.3 Größenordnungen.- 1.2.4 Potenzrechnung.- 1.2.5 Der größte gemeinsame Teiler.- 1.2.6 Beispiel: Primzahlen.- 1.3 Abstraktionen mit Prozeduren höherer Ordnung.- 1.3.1 Prozeduren als Argumente.- 1.3.2 Konstruktion von Prozeduren mit lambda.- 1.3.3 Prozeduren als allgemeine Methode.- 1.3.4 Prozeduren als Ergebnis.- 2 Konstruktion von Abstraktionen mit Daten.- 2.1 Einführung in die Datenabstraktion.- 2.1.1 Beispiel: Arithmetische Operationen für rationale Zahlen.- 2.1.2 Abstraktionsbarrieren.- 2.1.3 Was sind eigentlich Daten?.- 2.1.4 Erweiterte Übung: Arithmetik mit Intervallen.- 2.2. Datenhierarchien und Abgeschlossenheit.- 2.2.1 Darstellung von Sequenzen.- 2.2.2 Hierarchische Strukturen.- 2.2.3 Sequenzen als konventionelle Schnittstellen.- 2.2.4 Beispiel: Eine Bildersprache.- 2.3 Symbole.- 2.3.1 Quotierung.- 2.3.2 Beispiel: Symbolisches Differenzieren ..- 2.3.3 Beispiel: Darstellung von Mengen.- 2.3.4 Beispiel: Huffman-Bäume.- 2.4. Mehrfachdarstellungen abstrakter Daten.- 2.4.1 Darstellungen komplexer Zahlen.- 2.4.2 Etikettierte Daten.- 2.4.3 Datengesteuerte Programmierung und Additivität.- 2.5 Systeme mit generischen Operationen.- 2.5.1 Generische Arithmetikoperationen.- 2.5.2 Kombination von Daten verschiedenen Typs.- 2.5.3 Beispiel: Symbolische Algebra.- 3 Modularität, Objekte und Zustände.- 3 Zuweisungen und lokale Zustände.- 3.1.1 Lokale Zustandsvariablen.- 3.1.2 Die Vorzüge der Zuweisung.- 3.1.3 Der Preis der Zuweisung.- 3.2 Das Umgebungsmodell der Auswertung.- 3.2.1 Die Auswertungsregeln.- 3.2.2 Anwendung einfacher Prozeduren.- 3.2.3 Rahmen als Ort, an dem sich der lokale Zustand befindet.- 3.2.4 Interne Definitionen.- 3.3 Modelle mit veränderbaren Daten.- 3.3.1 Veränderbare Listenstrukturen.- 3.3.2 Darstellung von Warteschlangen.- 3.3.3 Darstellung von Tabellen.- 3.3.4 Ein Simulator für digitale Schaltkreise.- 3.3.5 Propagierung von Beschränkungen.- 3.4 Gleichzeitigkeit: Zeit ist das Wesentliche.- 3.4.1 Die Natur der Zeit in gleichzeitigen Systemen.- 3.4.2 Mechanismen zur Steuerung der Gleichzeitigkeit.- 3.5 Datenströme.- 3.5.1 Ströme als verzögerte Listen.- 3.5.2 Unendliche Datenströme.- 3.5.3 Wir nutzen das Datenstrom-Paradigma.- 3.5.4 Datenströme und verzögerte Auswertung.- 3.5.5 Modularität funktionaler Programme und Modularität von Objekten.- 4 Metalinguistische Abstraktion.- 4 Der metazirkuläre Evaluator.- 4.1.1 Das Kernstück des Evaluators.- 4.1.2 Darstellung von Ausdrücken.- 4.1.3 Die Datenstrukturen des Evaluators.- 4.1.4 Der Evaluator als Programm.- 4.1.5 Behandlung von Daten als Programm.- 4.1.6 Interne Definitionen.- 4.1.7 Die Syntaxanalyse von der Ausführung trennen.- 4.2 Variationen zu einem Schema — Auswertung nach Vorschrift.- 4.2.1 Auswertung in normaler und in applikativer Reihenfolge.- 4.2.2 Ein Interpretierer mit Auswertung nach Vorschrift.- 4.2.3 Datenströme als Listen nach Vorschrift.- 4.3 Variationen zu einem Schema — nondeterministische Berechnung.- 4.3.1 Amb und die Suche.- 4.3.2 Beispiele Nondeterministischer Programme.- 4.3.3 Implementierung des amb-Evaluators.- 4.4 Logikprogrammierung.- 4.4.1 Deduktiver Informationsabruf.- 4.4.2 Wie das Abfragesystem funktioniert.- 4.4.3 Ist Logikprogrammierung Mathematische Logik?.- 4.4.4 Implementierung des Abfragesystems.- 5 Rechnen mit Registermaschinen.- 5.1 Entwurf von Registermaschinen.- 5.1.1 Eine Sprache zur Beschreibung von Registermaschinen.- 5.1.2 Abstraktion beim Entwurf von Maschinen.- 5.1.3 Unterprogramme.- 5.1.4 Implementierung der Rekursion mit einem Keller.- 5.1.5 Befehlsübersicht.- 5.2 Ein Simulator für Registermaschinen.- 5.2.1 Das Maschinenmodell.- 5.2.2 Der Assembler.- 5.2.3 Erzeugen von Ausführungsprozeduren für Befehle.- 5.2.4 Überwachen der Maschinenleistung.- 5.3 Speicherzuteilung und Speicherbereinigung.- 5.3.1 Speicher als Vektoren.- 5.3.2 Als ob der Speicher unendlich wäre.- 5.4 Der Evaluator mit expliziter Steuerung.- 5.4.1 Der Kern des Evaluators mit expliziter Steuerung.- 5.4.2 Auswerten von Sequenzen und Endrekursion.- 5.4.3 Bedingte Ausdrücke, Zuweisungen und Definitionen.- 5.4.4 Laufenlassen des Evaluators.- 5.5 Übersetzen.- 5.5.1 Die Struktur des Übersetzers.- 5.5.2 Übersetzen von Ausdrücken.- 5.5.3 Übersetzen von zusammengesetzten Ausdrücken.- 5.5.4 Kombination von Anweisungsfolgen.- 5.5.5 Ein Beispiel für übersetzten Code.- 5.5.6 Lexikalische Adressierung.- 5.5.7 Die Schnittstelle zwischen übersetztem Code und dem Evaluator.- Appendix zur deutschen Auflage.- Verzeichnis der Übungen.- Stichwortverzeichnis.