Erzieher, Generäle, Diätspezialisten, Psychologen und Eltern programmie ren. Armeen, Studenten und manche Gesellschaften sind programmiert. Werden größere Probleme in Angriff genommen, wird eine Reihe von Pro grammen benötigt, von denen die meisten erst extra erstellt werden. Diese Programme sind voller Problemlösungen, die dem vorliegenden Problem ei gen zu sein scheinen. Um das Programmieren als eigenständige intellektu elle Tätigkeit schätzen zu lernen, muß man sich dem Programmieren schon selbst zuwenden; man muß Programme lesen und Programme schreibe- viele Programme. Es spielt keine große Rolle, was für Programme das sind und welches ihre Anwendungen sind. Eine Rolle spielt jedoch, wie gut sie sind und wie reibungslos sie mit anderen Programmen zusammen arbeiten bei der Bildung noch größerer Programme. Der Programmierer muß sowohl die Vollkommenheit der Teile als auch die Angemessenheit der Zusammenstellung zum Ziel haben. In diesem Buch ist der Begriff "Pro grammieren" eingeengt auf das Erzeugen, Ausführen und Untersuchen von Programmen, die in einem Lisp-Dialekt zur Ausführung auf einem digita len Rechner geschrieben wurden. Mit Lisp beschränken oder begrenzen wir nicht die Möglichkeiten der Programmierung, s. ondern nur die Notation, in der wir unsere Programme schreiben. Der Umgang mit dem Gegenstand dieses Buches bringt uns mit drei Phänomenen in Berührung: mit dem menschlichen Verstand, mit großen Mengen von Computerprogrammen und mit dem Computer selbst. Jedes Computerprogramm ist ein im Geist skizziertes Modell eines realen oder mentalen Prozesses.
Sprache
Verlagsort
Verlagsgruppe
Produkt-Hinweis
Broschur/Paperback
Klebebindung
Illustrationen
Maße
Höhe: 23.5 cm
Breite: 15.5 cm
Gewicht
ISBN-13
978-3-540-52043-6 (9783540520436)
DOI
10.1007/978-3-662-01039-6
Schweitzer Klassifikation
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 Parameter.- 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 Operatoren für rationale Zahlen.- 2.1.2 Abstraktionsbarrieren.- 2.1.3 Was sind eigentlich Daten?.- 2.1.4 Beispiel: Arithmetik mit Intervallen.- 2.2 Datenhierarchien.- 2.2.1 Darstellung von Sequenzen.- 2.2.2 Darstellung von Baumstrukturen.- 2.2.3 Symbole und die Notwendigkeit des quote.- 2.2.4 Beispiel: Symbolisches Differenzieren.- 2.2.5 Beispiel: Darstellung von Mengen.- 2.2.6 Beispiel: Huffman-Bäume.- 2.3 Mehrfachdarstellungen abstrakter Daten.- 2.3.1 Darstellungen komplexer Zahlen.- 2.3.2 Manifeste Typen.- 2.3.3 Datengesteuerte Programmierung.- 2.4 Systeme mit generischen Operatoren.- 2.4.1 Generische Arithmetikoperatoren.- 2.4.2 Kombination von Operanden verschiedenen Typs.- 2.4.3 Beispiel: Symbolische Algebra.- 3 Modularität, Objekte und Zustände.- 3.1 Zuweisungen und lokale Zustände.- 3.1.1 Lokale Zustandsvariablen.- 3.1.2 Der Preis der Zuweisung.- 3.1.3 Die Vorzüge der Zuweisung.- 3.2 Das Umgebungsmodell der Auswertung.- 3.2.1 Die Auswertungsregeln.- 3.2.2 Auswertung 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 Datenströme.- 3.4.1 Datenströme als Standardschnittstellen.- 3.4.2 Prozeduren höherer Ordnung für Datenströme.- 3.4.3 Implementierung von Datenströmen.- 3.4.4 Datenströme unendlicher Länge.- 3.4.5 Datenströme und verzögerte Auswertung.- 3.4.6 Mit Datenströmen Modelle von lokalen Zuständen bilden.- 4 Metalinguistische Abstraktion.- 4.1 Der metazirkuläre Evaluator.- 4.1.1 Das Kernstück des Evaluators.- 4.1.2 Darstellung von Ausdrücken.- 4.1.3 Bearbeitung von Umgebungen.- 4.1.4 Der Evaluator als Lisp-Programm.- 4.1.5 Behandlung von Ausdrücken als Programm.- 4.2 Variationen zu einem Schema.- 4.2.1 Auswertung in normaler Reihenfolge.- 4.2.2 Andere Arten der Bindung.- 4.3 Module.- 4.3.1 Verwendung von Umgebungen zum Erzeugen von Modulen.- 4.3.2 Module in einem System für generische Arithmetik.- 4.4 Logikprogrammierung.- 4.4.1 Deduktiver Informationsabruf.- 4.4.2 Wie das Anfragesystem funktioniert.- 4.4.3 Ist Logikprogrammierung Mathematische Logik?.- 4.5 Implementierung des Anfragesystems.- 4.5.1 Die Treiberschleife und Instantiierung.- 4.5.2 Der Evaluator.- 4.5.3 Finden von Aussagen durch Mustervergleich.- 4.5.4 Regeln und Unifikation.- 4.5.5 Die Datenbank.- 4.5.6 Weitere nützliche Prozeduren.- 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 Ein Simulator für Registermaschinen.- 5.2 Der Evaluator mit expliziter Steuerung.- 5.2.1 Der Kern des Evaluators mit expliziter Steuerung.- 5.2.2 Auswerten von Sequenzen und Endrekursion.- 5.2.3 Bedingte Ausdrücke und andere Sonderformen.- 5.2.4 Laufenlassen des Evaluators.- 5.2.5 Interne Definitionen.- 5.3 Übersetzen.- 5.3.1 Die Struktur des Übersetzers.- 5.3.2 Übersetzen von Ausdrücken.- 5.3.3 Datenstrukturen des Übersetzers.- 5.3.4 Elementare Codegeneratoren.- 5.3.5 Ein Beispiel für übersetzten Code.- 5.3.6 Die Schnittstelle zwischen übersetztem Code und dem Evaluator.- 5.3.7 Lexikalische Adressierung.- 5.4 Speicherzuteilung und Speicherbereinigung.- 5.4.1 Speicher als Vektoren.- 5.4.2 Als ob der Speicher unendlich wäre.- Anhang zur deutschen Ausgabe.- Stichwortverzeichnis.