Gödel, Escher, Bach - ein Endloses Geflochtenes Band
absurd. Das Erstaun-
Abb. 37 . Schmetterlinge , von M. C. Escher (Holzstich, 1950),
liche ist, daß sogar ein winziger Teil eines Bildes von Escher oder eines Stücks von Bach sie sofort verraten. Genauso, wie die DNS eines Fisches in jedem winzigen Teil des Fisches vorhanden ist, so ist die „Signatur“ eines schöpferischen Menschen in jedem einzelnen Teil seines Werks enthalten. Wir haben dafür kein genaueres Wort als das vage und verschwommene „Stil“.
Immer wieder stoßen wir auf „Gleichheit in der Verschiedenheit“ und auf die Frage:
Wann sind zwei Dinge einander gleich?
Sie wird in diesem Buch immer wieder auftauchen. Wir werden aus allen möglichen unerwarteten Winkeln auf sie stoßen, und schließlich werden wir sehen, wie tief diese einfache Frage mit dem Wesen der Intelligenz verknüpft ist.
Daß dieses Problem im Kapitel über Rekursion auftrat, ist kein Zufall, denn Rekursion ist ein Bereich, in dem „Gleichheit in der Verschiedenheit“ eine zentrale Rolle spielt. Rekursion beruht darauf, daß das „gleiche“ Ereignis auf verschiedenen Ebenen zugleich auftritt. Doch sind die Ereignisse auf verschiedenen Ebenen nicht genau gleich — oder vielmehr: wir finden trotz allen Verschiedenheiten eine invariante Eigenschaft in ihnen. Zum Beispiel sind im Kleinen harmonischen Labyrinth all die verschiedenen Stufen in keiner Weise miteinander verwandt — ihre „Gleichheit“ beruht auf bloß zwei Faktoren: 1) sind es Geschichten, 2) handeln sie von Herrn Schildkröte und Achilles. Abgesehen davon unterscheiden sie sich grundlegend voneinander.
Programmierung und Rekursion: Modularität, Schleifen, Prozeduren
Eine der wesentlichen Fertigkeiten bei der Programmierung von Computern besteht darin, zu erkennen, wann zwei Vorgänge in diesem. weiteren Sinn gleich sind, denn das führt zur Modularisierung— dem Aufspalten einer Aufgabe in natürliche Unteraufgaben. Zum Beispiel will man eine Folge von vielen ähnlichen Operationen nacheinander durchführen. Anstatt sie alle niederzuschreiben, kann man eine Schleife niederschreiben, die dem Computer sagt, eine bestimmte Anzahl von Operationen vorzunehmen, dann zurückzukehren, um sie immer wieder auszuführen, bis eine gewisse Bedingung erfüllt ist. Nun braucht der Körper der Schleife — die feststehende Anzahl von zu wiederholenden Anweisungen — nicht vollständig festzustehen. Er kann in einer voraussagbaren Weise variieren.
Ein Beispiel ist der einfachste Test, ob eine natürliche Zahl N eine Primzahl ist, indem man versucht, N durch 2 zu dividieren, dann durch 3, 4, 5 usw. bis N-1. Wenn N all diese Tests überlebt hat, ohne geteilt worden zu sein, dann ist es eine Primzahl. Man beachte, daß jeder Schritt der Schleife ähnlich, aber nicht gleich jedem anderen Schritt ist. Außerdem beachte man, daß die Anzahl der Schritte mit N variiert deshalb könnte eine Schleife von feststehender Länge niemals als allgemeiner Test für Primzahlen verwendet werden. Für den „Abbruch“ der Schleife gibt es zwei Kriterien: 1) wenn eine Zahl genau in N aufgeht, stelle das Verfahren mit der Antwort „Nein“ ein; 2) wenn N-1 als Testdivisor erreicht ist und N überlebt hat, stelle das Verfahren mit der Antwort „Ja“ ein.
Das allgemeine Prinzip der Schleife ist also dieses: Führe eine Anzahl verwandter Schritte immer und immer wieder durch und buche das Verfahren ab, wenn spezifische Bedingungen erfüllt sind. Nun wird in gewissen Fällen die maximale Anzahl von Schritten in einer Schleife von vornherein bekannt sein; in anderen Fällen fängt man einfach an und wartet, bis sie abgebrochen wird. Diese zweite Art von Schleife — ich nenne sie freie Schleife — ist gefährlich, weil das Kriterium für Abbruch vielleicht gar nicht eintritt und den Computer in einer sogenannten „unendlichen Schleife“ beläßt. Der Unterschied zwischen begrenzter Schleife und freier Schleife ist eine der wichtigsten Tatsachen in der gesamten Computerwissenschaft, und wir werden ihr noch ein ganzes Kapitel widmen: „BlooP und FlooP und GlooP“.
Nun können Schleifen ineinander verschachtelt werden. Nehmen wir z. B. an, daß wir alle Zahlen zwischen 1 und 5000 daraufhin prüfen, ob sie Primzahlen sind. Wir können eine zweite Schleife niederschreiben, die den oben beschriebenen Test immer und immer wieder anwendet, von N = 1 bis N = 5000. So wird unser Programm eine „Schleife in der Schleife“-Struktur besitzen. Solche Programmstrukturen sind typisch; man
Weitere Kostenlose Bücher