Max freut sich über jede Nachricht von Lila. Sie fragt ihn, ob man Goethe als Programmierer betrachten kann. Damit hat sich Max noch nie beschäftigt, aber das Gedicht vom Zauberlehrling kennt er. Das geht so:
Der Zauberlehrling.
Hat der alte Hexenmeister,
Sich doch einmal wegbegeben!
Und nun sollen seine Geister
Auch nach meinem Willen leben.
Seine Wort und Werke
Merkt ich, und den Brauch,
Und mit Geistesstärke
Thu ich Wunder auch.
Walle! walle!
Manche Strecke,
Daß zum Zwecke,
Wasser fließe,
Und, mit reichem vollem Schwalle,
Zu dem Bade sich ergieße.
Und nun komm du alter Besen,
Nimm die schlechten Lumpenhüllen,
Bist schon lange Knecht gewesen,
Nun erfülle meinen Willen.
Auf zwey Beinen stehe,
Oben sey ein Kopf,
Eile nun und gehe
Mit dem Wassertopf!
Walle! walle!
Manche Strecke,
Daß, zum Zwecke,
Wasser fließe.
Und, mit reichem vollem Schwalle,
Zu dem Bade sich ergieße.
Seht er läuft zum Ufer nieder,
Warlich ist schon an dem Flusse,
Und mit Blitzesschnelle wieder
Ist er hier mit raschem Gusse.
Schon zum zweytenmale!
Wie das Becken schwillt!
Wie sich jede Schaale
Voll mit Wasser füllt!
Stehe! Stehe!
Denn wir haben
Deiner Gaben
Vollgemessen! –
Ach ich merk es, wehe! wehe!
Hab ich doch das Wort vergessen!
Ach! das Wort, worauf am Ende
Er das wird was er gewesen.
Ach er läuft und bringt behende,
Wärst du doch der alte Besen!
Immer neue Güsse
Bringt er schnell herein,
Ach! und hundert Flüsse
Stürzen auf mich ein.
Nein nicht länger
Kann ichs lassen,
Will ihn fassen.
Das ist Tücke!
Ach! nun wird mir immer bänger!
Welche Mine! welche Blicke!
O! du Ausgeburt der Hölle!
Soll das ganze Haus ersaufen?
Seh ich über jede Schwelle
Doch schon Wasserströme laufen.
Ein verruchter Besen
Der nicht hören will!
Stock! der du gewesen,
Steh doch wieder still!
Willsts am Ende
Gar nicht lassen;
Will dich fassen,
Will dich halten,
Und das alte Holz behende
Mit dem scharfen Beile spalten.
Seht da kommt er schleppend wieder!
Wie ich mich nur auf dich werfe,
Gleich, o Kobold! liegst du nieder,
Krachend trifft die glatte Schärfe.
Warlich braf getroffen!
Seht er ist entzwey,
Und nun kann ich hoffen,
Und ich athme frey!
Wehe! wehe!
Beyde Theile
Stehn, in Eile,
Schon als Knechte
Völlig fertig in die Höhe!
Helft mir ach ihr hohen Mächte!
Und sie laufen! Naß und nässer
Wirds im Saal und auf den Stufen,
Welch entsetzliches Gewässer!
Herr und Meister! hör mich rufen!
Ach! da kommt der Meister!
Herr, die Noth ist groß,
Die ich rief die Geister
Werd ich nun nicht los.
»In die Ecke,
Besen! Besen!
Seyds gewesen.
Denn als Geister
Ruft euch nur zu seinem Zwecke,
Erst hervor der alte Meister.«
***
Wie könnte er die Zauberlehrling-Situation strukturieren?
Aus Max' Sicht
Würde er ein Wasserbecken füllen wollen, so würde er nach jedem Wassereimer, den er ins Becken ausgießt, überlegen: Ist das Becken voll? Wenn es nicht voll ist, würde er weitermachen, wenn es voll ist, dann würde er die Arbeit stoppen. Das Programm wäre zu Ende.
Aus Computersicht
Aber wie hat das Goethe für seine Besen organisiert?
Hat der Besen den Auftrag, Wasser zu holen, so tut er das. Hat der Besen den Auftrag aufzuhören, dann tut er das. Hat der Besen den Auftrag, sich zu verdoppeln, dann tut er das. Der alte und der neue Besen klären ihre Zustände und agieren entsprechend. Das findet Max schnell heraus. Als er dann das Flowchart zeichnen will, merkt er, dass das auf die klassische Weise nicht geht. Der "Besen" beantwortet die Zustandsfrage nicht mehr mit Ja oder Nein, sondern hat 3 Antworten. Komisch, das kennt er irgendwie! Ach, mehrwertige Logik! Statt der Raute braucht er ein neues Symbol: eins für 2 Eingänge und 3 Ausgänge. Hat sich das Goethe ausgedacht? Er war einfach genial!
Das muß er gleich mal Lila erzählen.
***
Übungsaufgaben
Welche Probleme ergeben sich außerdem? Wie könnte man die lösen?
Antworten
- Das Programm endet nicht wirklich mit der Stop-Anweisung, sondern erst, wenn alle Stop-Anweisungen ausgeführt werden. Das kann man vermeiden, indem man eine Variable – zum Beispiel stop – einführt, die nur die boolschen Werte o und 1 annimmt. Bevor man einen neuen Besen kreiert oder erneut Wasser holt, sollte man nach dem Wert dieser Variablen fragen.
- Das Programm ist "offen": Es kann während seines Ablaufes immer neue Instanzen schaffen und niemals enden. Das kann man vermeiden, indem man eine endliche Schranke für die Anzahl neuer Besen einführt – zum Beispiel sup_besen = 1000, die Besen mitzählt und vor jedem neuen Besen nachfragt, ob die Schranke bereits erreicht ist.