ebook img

Struktur und Interpretation von Computerprogrammen: Eine Informatik-Einführung PDF

664 Pages·1993·19.632 MB·German
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Struktur und Interpretation von Computerprogrammen: Eine Informatik-Einführung

Struktur und Interpretation von Computerprogrammen H. Abelson und G. 1. Sussman mit 1. Sussman Struktur und Interpretation von Computerprogrammen Eine Informatik- Einftihrung Vorwort von Alan 1. Perlis Ubersetzt von S. Daniels-Herold 2., Auflage unverănderte Springer-Verlag Berlin Heidelberg GmbH Harold Abelson Gerald Jay Sussman Department of Electrical Engineering and Computer Science MIT, Cambridge, MA, USA Julie Sussman Arlington, MA, USA Obersetzt von: DipL-Inform. Susanne Daniels-Herold Eslamer StraBe 9, D-81549 Munchen TiteI der englischen Originalausgabe: Structure and Interpretation of Computer Programs © 1985 by The Massachusetts Institute of Technology Mit 82 Abbildungen ISBN 978-3-540-56934-3 ISBN 978-3-662-01163-8 (eBook) DOI 10.1007/978-3-662-01163-8 Abelson, HaroId: Struktur und Interpretation von Computerprogrammen: eine Informatik-Einfiihrung/ H. Abelson und G. J. Sussman. MitJ. Sussman. Vorw. von Alan J. PerIis. Ubers. von S. Daniels-Herold. -2., unverănd. Aufl. - Berlin; Heidelberg; New York; London; Paris; Tokyo; Hong Kong; Barcelona; Budapest: Springer, 1993 Einheitssacht.: Structure and interpretation of computer programs <dt.> Dieses Werk ist urheberrechtlich geschiitzt. Die dadurch begriindeten Rechte, insbesondere die der Ubersetzung, des Nachdrucks, des Vortrags, der Entnahme von Abbildungen und Tabellen, der Funksendung, der Mikroverfilmung oder der VervieWiltigung auf anderen Wegen und der Speicherung in Datenverarbeitungsanlagen, biei ben, auch bei nur auszugsweiser Verwertung, vorbehalten. Eine Vervielfâltigung dieses Werkes oder von Teilen dieses Werkes ist auch im Einzelfall nur an den Grenzen der gesetzlichen Bestimmungen des Urheberrechtsgesetzes der Bundesrepublik Deutschland vom 9. September 1965 in der jeweils geltenden Fassung zulăssig. Sie ist grundsătzlich vergiitungspflichtig. Zuwider handlungen unterliegen den Strafbestimmungen des Urheberrechtsgesetzes. © Springer-Verlag Berlin Heidelberg 1991, 1993 Urspriinglich erschienen bei Springer-Verlag Berlin Heidelberg New York 1993 Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, daB solche Namen im Sinne der Warenzeichen-und Markenschutz Gesetzgebung als frei zu betrachten wăren und daher von jedermann benutzt werden diirften. 45/3140-54321 - Gedruckt auf săurefreiem Papier Dieses Buch ist in Ehrfurcht und Bewunderung dem Geist gewidmet, der im Computer lebendig ist. "Ich halte es fiir ganz besonders wichtig, daB wir in der Informatik den SpaB an der Arbeit mit dem Computer nicht verlieren. Am Anfang machte es riesigen SpaB. Natiirlich kamen die Kunden, die dafiir bezahlten, dabei gelegentlich schlecht weg, und so begannen wir nach einiger Zeit, ihre Be schwerden ernst zu nehmen. Wir bekamen das Gefiihl, tatsachlich fiir den erfolgreichen, fehlerfreien, perfekten Einsatz der Computer verantwortlich zu sein. Ich glaube nicht, daB das der Fall ist. Ich glaube, daB wir dafiir ver antwortlich sind, ihre Fahigkeiten zu erweitern, neue Wege zu wei sen und die Freude an der Sache nicht zu verlieren. Ich hoffe, daB das Gebiet der Infor matik seine vergniigliche Seite niemals verliert. Und vor allem hoffe ich, daB wir nicht zu Missionaren werden. Wir soUten uns nicht wie Bibelverkaufer fiihlen. Davon gibt es schon zu viele auf der Welt. Was wir iiber Computer wissen, werden auch andere lernen. Wir sollten nicht meinen, daB wir den Schliissel zum erfolgreichen Einsatz des Computers allein in der Hand hiel ten. Was wir in der Hand halten, so glaube und hoffe ich, ist Intelligenz: die Fahigkeit, in der Maschine mehr zu sehen als damals, als wir ihr zum erste n Mal gegeniiberstanden, und die Fahigkeit, mehr aus der Maschine zu machen." Alan J. P erlis Inhaltsverzeichnis Geleitwort xi Vorwort xvii Danksagung xx 1 Konstruktion von Abstraktionen mit Prozeduren 1 1.1 Die Programmelemente ..... 4 1.1.1 Ausdriicke......... 5 1.1.2 Namen und Umgebungen 8 1.1.3 Auswertung von Kombinationen 10 1.1.4 Zusammengesetzte Prozeduren . 13 1.1.5 Das Substitutionsmodell fUr Prozeduranwendungen . 15 1.1.6 Bedingte Ausdriicke und Pradikate . . . . . . . . .. 18 1.1. 7 Beispiel: Berechnung der Quadratwurzel nach dem Ne wtonschen Iterationsverfahren 22 1.1.8 Prozeduren als "Black-box"-Abstraktionen 27 1.2 Prozeduren und Prozesse ........ 33 1.2.1 Lineare Rekursion und Iteration 35 1.2.2 Baumrekursion.. 40 1.2.3 Gro13enordnungen....... 45 1.2.4 Potenzrechnung........ 47 1.2.5 Der gro13te gemeinsame Teiler 50 1.2.6 Beispiel: Primzahlen . . . . . 52 1.3 Abstraktionen mit Prozeduren hOherer Ordnung 60 1.3.1 Prozeduren als Parameter . . . . . . . . . 61 1.3.2 Konstruktion von Prozeduren mit lambda 65 1.3.3 Prozeduren als allgemeine Methode. 70 1.3.4 Prozeduren als Ergebnis ......... . 77 viii Inhaltsverzeichnis 2 Konstruktion von Abstraktionen mit Daten 83 2.1 Einflihrung in die Datenabstraktion ........... 87 2.1.1 Beispiel: Arithmetische Operatoren flir rationale Zahlen . . . . . . . . . . . . 87 2.1.2 Abstraktionsbarrieren . . . . . . . . 92 2.1.3 Was sind eigentlich Daten? . . . . . 95 2.1.4 Beispiel: Arithmetik mit Intervallen 99 2.2 Datenhierarchien . . . . . . . . . . . . . 104 2.2.1 Darstellung von Sequenzen ..... 106 2.2.2 Darstellung von Baumstrukturen . . 113 2.2.3 Symbole und die Notwendigkeit des quote. 118 2.2.4 Beispiel: Symbolisches Differenzieren 123 2.2.5 Beispiel: Darstellung von Mengen 129 2.2.6 Beispiel: Huffman-Baume . . . . 140 2.3 Mehrfachdarstellungen abstrakter Daten 150 2.3.1 Darstellungen komplexer Zahlen 153 2.3.2 Manifeste Typen . . . . . . . . . 157 2.3.3 Datengesteuerte Programmierung . 162 2.4 Systeme mit generischen Operatoren . . . 169 2.4.1 Generische Arithmetikoperatoren . 170 2.4.2 Kombination von Operanden verschiedenen Typs 175 2.4.3 Beispiel: Symbolische Algebra. . . . . . . . . . . 183 3 Modularitat, Objekte und Zustande 199 3.1 Zuweisungen und lokale Zustande . 200 3.1.1 Lokale Zustandsvariablen . 201 3.1.2 Der Preis der Zuweisung . . 209 3.1.3 Die Vorzuge der Zuweisung 214 3.2 Das Umgebungsmodell der Auswertung 220 3.2.1 Die Auswertungsregeln. . . . . . 221 3.2.2 Auswertung einfacher Prozeduren . 225 3.2.3 Rahmen als Ort, an dem sich der lokale Zustand befindet . . . . . . . . . . . 228 3.2.4 Interne Definitionen ..... . 234 3.3 Madelle mit veranderbaren Daten .. . 237 3.3.1 Veranderbare Listenstrukturen 238 3.3.2 Darstellung von Warteschlangen 249 3.3.3 Darstellung von Tabellen .... 256 3.3.4 Ein Simulator flir digit ale Schaltkreise 263 3.3.5 Propagierung von Beschrankungen .. 276 Inhaltsverzeichnis ix 3.4 Datenstrome ....................... 290 3.4.1 Datenstrome als Standardschnittstellen .... 290 3.4.2 Prozeduren hoherer Ordnung flir Datenstrome 296 3.4.3 1mplementierung von Datenstromen . . . 309 3.4.4 Datenstrome unendlicher Lange. . . . . . . . . 318 3.4.5 Datenstrome und verzogerte Auswertung ... 330 3.4.6 Mit Datenstromen Modelle von lokalen Zustanden bilden ........................ . 343 4 Metalinguistische Abstraktion 351 4.1 Der metazirkulare Evaluator. . . . . . 355 4.1.1 Das Kernstiick des Evaluators. 357 4.1.2 Darstellung von Ausdriicken. . 362 4.1.3 Bearbeitung von Umgebungen 366 4.1.4 Der Evaluator als Lisp-Programm 371 4.1.5 Behandlung von Ausdriicken als Programm 374 4.2 Variationen zu einem Schema . . . . . . . . 378 4.2.1 Auswertung in normaler Reihenfolge 379 4.2.2 Andere Arten der Bindung ..... 383 4.3 Module .................... 390 4.3.1 Verwendung von Umgebungen zum Erzeugen von Modulen . . . . . . . . . . . . . . . . . . 391 4.3.2 Module in einem System flir generische Arithmetik 395 4.4 Logikprogrammierung . . . . . . . . . . . . 403 4.4.1 Deduktiver 1nformationsabruf . . . . . . . . . . . 406 4.4.2 Wie das Anfragesystem funktioniert ....... 418 4.4.3 1st Logikprogrammierung Mathematische Logik? 428 4.5 1mplementierung des Anfragesystems . . . . . 435 4.5.1 Die Treiberschleife und 1nstantiierung . . . . 435 4.5.2 Der Evaluator. . . . . . . . . . . . . . . . . . 437 4.5.3 Finden von Aussagen durch Mustervergleich . 441 4.5.4 Regeln und Unifikation 444 4.5.5 Die Datenbank . . . . . . . . 448 4.5.6 Weitere niitzliche Prozeduren 452 5 Rechnen mit Registermaschinen 461 5.1 Entwurf von Registermaschinen . 463 5.1.1 Eine Sprache zur Beschreibung von Registermaschinen . . . . . . . . . . . 466 5.1.2 Abstraktion beim Entwurf von Maschinen 471 5.1.3 Unterprogramme ............. . 475 x Inhaltsverzeichnis 5.1.4 Implementierung der Rekursion mit einem Keller 480 5.1.5 Ein Simulator fiir Registermaschinen . . . . . . . 488 5.2 Der Evaluator mit expliziter Steuerung . . . . . . . . . . 505 5.2.1 Der Kern des Evaluators mit expliziter Steuerung . 507 5.2.2 Auswerten von Sequenzen und Endrekursion . 515 5.2.3 Bedingte Ausdriicke und andere Sonderformen 519 5.2.4 Laufenlassen des Evaluators . 522 5.2.5 Interne Definitionen ... . . 527 5.3 Ubersetzen .............. 532 5.3.1 Die Struktur des Ubersetzers 535 5.3.2 Ubersetzen von Ausdriicken . 539 5.3.3 Datenstrukturen des Ubersetzers 555 5.3.4 Elementare Codegeneratoren .. 560 5.3.5 Ein Beispiel fiir iibersetzten Code. 569 5.3.6 Die Schnittstelle zwischen iibersetztem Code und dem Evaluator . . . . . . . . . . 576 5.3.7 Lexikalische Adressierung . . . . . . 582 5.4 Speicherzuteilung und Speicherbereinigung 589 5.4.1 Speicher als Vektoren ....... . 590 5.4.2 Als ob der Speicher unendlich ware. 595 Anhang zur deutschen Ausgabe 605 Literat urverzeichnis 607 Stichwortverzeichnis 613 Geleitwort Erzieher, Generlile, Diatspezialisten, Psychalagen und Eltern pragrammie ren. Armeen, Studenten und manche Gesellschaften sind programmiert. Werden grofiere Prableme in Angriff genammen, wird eine Reihe van Pra grammen benotigt, van denen die meisten erst extra erstellt werden. Diese Pragramme sind valier Prablemlosungen, die dem ·varliegenden Prablem ei gen zu sein scheinen. Urn das Pragrammieren als eigenstandige intellektu elle Tatigkeit schatzen zu lernen, mufi man sich dem Pragrammieren schan selbst zuwenden; man mufi Pragramme lesen und Pragramme schreiben - viele Pragramme. Es spielt keine grafie RaIle, was fiir Pragramme das sind und welches ihre Anwendungen sind. Eine RaIle spielt jedach, wie gut sie sind und wie reibungslas sie mit anderen Pragrammen zusammen arbeiten bei der Bildung nach grofierer Pragramme. Der Pragrammierer mu:13 sawahl die Vallkammenheit der Teile als auch die Angemessenheit der Zusammenstellung zum Ziel haben. In dies em Buch ist der Begriff "Pra grammieren" eingeengt auf das Erzeugen, Ausfiihren und Untersuchen van Pragrammen, die in einem Lisp-Dialekt zur Ausfiihrung auf einem digit a len Rechner geschrieben wurden. Mit Lisp beschranken ader begrenzen wir nicht die Moglichkeiten der Pragrammierung, s.ondern nur die Natatian, in der wir un sere Pragramme schreiben. Der Umgang mit dem Gegenstand dieses Buches bringt uns mit drei Phanamenen in Beriihrung: mit dem menschlichen Verstand, mit grafien Mengen van Camputerpragrammen und mit dem Camputer selbst. Jedes Camputerpragramm ist ein im Geist skizziertes Madell eines realen ader mentalen Prazesses. Diese Prazesse, die mit menschlicher Erfahrung und menschlichem Denken entstehen, sind grafi an der Zahl, schwierig im Detail und stets nur zum Teil verstandesmaBig erfa:l3t. Die Madellbildung durch un sere Pragramme stellt uns selten auf Dauer zufrieden. Sa werden unsere Pragramme standig weiterentwickelt, abwahl sie sorgfliltig erarbeitete ab strakte Symbalsammlungen sind, Masaiken van ineinandergreifenden Funk tianen: Wir andern sie, wenn un sere Erkenntnis des Madells sich vertieft, er- xii Geleitwort weitert, verallgemeinert, bis das Modell schlieBlich einen metastabilen Platz innerhalb wieder eines anderen Modells erhalt, mit dem wir uns dann ausein andersetzen. Die Freude beim Programmieren entspringt der fortgesetzten Enthiillung von immer neuen sich in Programmen ausdriickenden Mechanis men (in den Gedanken und im Computer) und der sich explosionsartig er weiternden Erkenntnis, die sie hervorrufen. Wenn die Kunst unsere Traume darstellt, dann fiihrt der Computer sie aus, in Programme verkleidet! Mit all seinen Fahigkeiten ist der Computer ein gestrenger Herr. Die Pro gramme miissen korrekt sein, und was wir sagen wollen, muf3 bis ins Detail genau gesagt werden. Wie bei jeder anderen symbolischen Vorgehensweise iiberzeugen wir uns von der Richtigkeit eines Programms durch Beweise. Lisp kann eine Semantik zugeordnet werden (iibrigens ein weiteres Modell), und wenn die Funktion eines Programms, sagen wir in Pradikatenlogik, an gegeben werden kann, konnen die Beweismethoden der Logik angewendet werden, urn einen ann~hmbaren Korrektheitsbeweis durchzufiihren. Wenn Programme groBer und komplizierter werden, was meistens der Fall ist, wird es zweifelhaft, ob die Spezifikationen selbst adaquat, konsistent lind korrekt sind, so daB vollstandige formale Beweise der Korrektheit fiir groBe Pro gramme selten zu finden sind. Da groBe Programme aus kleinen entstehen, ist es von entscheidender Bedeutung, daB wir ein Arsenal von Standard programmstrukturen entwickeln, von deren Korrektheit wir uns iiberzeugt haben -wir nennen sie Idiome -, und lernen, sie mit Hilfe von erprobten Orga nisationstechniken zu groBeren Strukturen zusammenzusetzen. Solche Tech niken werden in diesem Buch ausfiihrlich behandelt, und sie zu verstehen ist eine wesentliche Voraussetzung fiir die Teilnahme an dem gewagten Unter nehmen, das man Programmieren nennt. Mehr als alles andere beschleunigt die Entdeckung und Beherrschung leistungsfahiger Organisationstechniken un sere Fahigkeit, groBe, bedeutende Programme zu schreiben. Umgekehrt nimmt uns das Schreiben von groBen Programmen so stark in Anspruch, daB wir angeregt sind, neue Methoden zu erfinden, die Masse an Funktionen und Details zu reduzieren, die in groBen Programmen untergebracht werden miissen. Anders als Programme miissen Computer den Gesetzen der Physik gehor chen. Wenn sie schnell sein sollen - einige Nanosekunden pro Zustands anderung -, diirfen sie Elektronen nur iiber kurze Entfernungen schicken (hochstens 0.5 m). Die Warme, die von der riesigen Zahl von Bauteilen auf so engem Raum erzeugt wird, muB abgefiihrt werden. Eine hervorragende Ingenieurskunst hat sich entwickelt, die auf dem Grat zwischen Vielfalt der Funktionen und Dichte der Bauteile wandelt. In jedem Fall arbeitet die Hardware auf einer elementareren Ebene als der, auf der wir zu program mieren belieben. Die Prozesse, die unsere Lisp-Programme in "Maschinen"-

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.