Gödel, Escher, Bach - ein Endloses Geflochtenes Band
kann.
Jede Prozedur in BlooP ergibt, wenn sie aufgerufen wird, einen Wert — nämlich den Wert der Variablen namens OUTPUT . Zu Beginn der Durchführung einer Prozedur wird als „default option“ angenommen, daß OUTPUT den Wert 0 hat. Auf diese Weise hat OUTPUT immer einen wohldefinierten Wert, auch wenn die Prozedur OUTPUT nie verändert.
WENN-Befehle und Verästelungen
Betrachten wir nun eine weitere Prozedur, die uns einige andere Eigenschaften von BlooP zeigt, welche ihm größere Allgemeinheit verleihen. Wenn man nur weiß, wie man addieren kann, wie kann man dann herausfinden, was der Wert von M - N ist? Der Trick besteht darin, daß man verschiedene Zahlen zu N addiert, bis man eine findet, die M ergibt. Was aber geschieht, wenn M kleiner als N ist? Was, wenn wir versuchen, 5 von 2 zu subtrahieren? Im Bereich der natürlichen Zahlen gibt es hierauf keine Antwort. Wir hätten aber doch gerne, daß unsere BlooP-Prozedur uns trotzdem eine Antwort gibt — sagen wir 0. Hier ist also eine BlooP-Prozedur, mit der sich subtrahieren läßt:
PROZEDURDEFINITION „MINUS“ [M, N]:
BLOCK 0: ANFANG
WENN M < N, DANN:
BEENDE BLOCK 0;
SCHLEIFE HÖCHSTENS M + 1 MAL:
BLOCK 1: ANFANG
WENN OUTPUT + N = M, DANN:
BRECHE AB SCHLEIFE 1;
OUTPUTOUTPUT + 1;
BLOCK 1: ENDE;
BLOCK 0: ENDE.
Hier machen wir von der impliziten Eigenschaft Gebrauch, daß OUTPUT mit 0 beginnt. Wenn M kleiner ist als N , dann ist die Subtraktion unmöglich, und wir springen sofort zum unteren Ende von BLOCK 0 , und die Antwort lautet 0. Das ist die Bedeutung der Zeile BEENDE BLOCK 0 . Ist aber M nicht kleiner als N , dann gehen wir über den BEENDE -Befehl hinweg und führen den nächsten Befehl aus (hier ein SCHLEIFE Befehl). In BlooP funktionieren WENN -Befehle immer so.
Also betreten wir SCHLEIFE 1 , die so heißt, weil der Block, den sie uns zu wiederholen anweist, BLOCK 1 ist. Wir versuchen, 0 zu N zu addieren, dann 1, 2 usw., biswir eine Zahl finden, die M ergibt. An diesem Punkt BRECHEN wir die Schleife AB , in der wir uns befinden, das heißt, wir springen zu demjenigen Befehl, der unmittelbar auf das ENDE folgt, welches das untere Ende des Blocks der Schleife markiert. In diesem Fall bringt uns der Sprung unmittelbar unter BLOCK 1: ENDE , was heißt, zum letzten Befehl des Algorithmus, und damit ist die Sache erledigt. OUTPUT enthält nunmehr die richtige Antwort.
Man beachte, daß es zwei verschiedene Befehle für den Sprung nach unten gibt: BEENDE und BRECHE AB . Der erste gilt für Blöcke, der zweite für Schleifen. BEENDE BLOCK n bedeutet, daß man zur letzten Zeile von BLOCK n zu springen hat, während BRECHE AB SCHLEIFE n bedeutet, daß man unter die letzte Zeile von BLOCK n zu springen hat. Diese Unterscheidung ist nur dann von Belang, wenn man sich in einer Schleife befindet und in ihr weitermachen will, aber nunmehr den Block verlassen will. Dann kann man BEENDE sagen, und das Richtige wird geschehen.
Man beachte auch, daß das Wort HÖCHSTENS jetzt der oberen Grenze der Schleife vorausgeht — eine Warnung, daß eine Schleife abgebrochen werden kann, bevor die obere Grenze erreicht ist.
Automatische Ballung
Schließlich haben wir noch zwei Eigenschaften von BlooP zu erklären. Beide sind sehr wichtig. Die erste ist die, daß wenn eine Prozedur definiert worden ist, sie in späteren Prozedurdefinitionen aufgerufen werden kann. Das wirkt sich so aus, daß wenn eine Operation in einer Prozedur definiert worden ist, sie einfach als ein Grundschritt aufgefaßt wird. Eine Eigenschaft von BlooP ist also die automatische Ballung. Man könnte das damit vergleichen, wie ein guter Eiskunstläufer sich neue Bewegungen aneignet — nicht indem er sie als lange Folgen primärer Muskeltätigkeit definiert, sondern aufgrund früher erlernter Bewegungen, die ihrerseits als Kombination früher erlernter Bewegungen gelernt wurden usw., und die Verschachtelung, die Geballtheit, kann durch viele Schichten hindurchgehen, bis man auf die primäre Muskeltätigkeit stößt. Und so wächst das Repertoire von BlooP-Programmen geradeso wie die Künste eines Eiskunstläufers durch Schleifen an.
BlooP-Tests
Die andere Eigenschaft von BlooP ist die, daß gewisse Prozeduren JA oder NEIN als Output haben können — anstelle von Zahlenwerten. Solche Prozeduren sind Tests und nicht Funktionen. Um diesen Unterschied zu markieren, muß der Name eines Tests mit einem Fragezeichen enden. Außerdem ist in einem Test die „default option“ für OUTPUT
Weitere Kostenlose Bücher