Wörter definieren

Forth arbeitet mit Wörtern! Und davon kennt Forth in der Regel schon eine ganze Menge. Die Details sollen hier nicht geklärt werden, sondern es geht erst mal um einen Überblick. Der Witz bei Forth liegt nun darin, dass Programme dadurch geschrieben werden, dass man Forth neue Worte beibringt. Diese neuen Worte machen dann das Programm aus und sie sind nach ihrer Definition (oder eben dem Beibringen, wenn einem dieser Ausdruck lieber ist) genauso integraler Bestandteil von Forth, wie die Worte, die Forth vorher kannte.

Um sich nun klar zu machen, wie das funktioniert soll nun erst mal ein anschauliches Beispiel beschrieben werden: Stellen sie sich vor, sie lernen Auto zu fahren. Bei der ersten Fahrstunde lernen sie, wie man die Kupplung tritt, den ersten Gang einlegt und dann die Kupplung langsam wieder loslässt und dabei Gas gibt, um loszufahren. Sicherlich ist das Ganze zu Beginn noch sehr 'stotterig', aber am Ende der ersten Fahrstunde werden sie es können.

Nun stellen sie sich weiter vor, ihr Fahrlehrer oder ihre Fahrlehrerin w\"urde ihnen zu Beginn dieser ersten Fahrstunde gesagt haben, dass er/sie ihnen beibringen will, wie man losfährt. Wenn sie dann zur zweiten Stunde in die Fahrschule kommen, dann braucht man ihnen nur noch zu sagen, dass sie losfahren sollen und schon wissen sie, was sie zu tun haben (selbst wenn das immer noch nicht so ganz ohne Ruckeln klappt).

Genau so arbeitet Forth! Man überlegt sich eine Reihe von Schritten, die der Computer der Reihe nach durchführen soll und gibt dem Ganzen einen Namen. In Zukunft muss man dann dem Computer nur noch diesen Namen sagen und er führt die entsprechenden Schritte der Reihe nach aus, ohne dass sie weiter etwas dazu tun müssen.

Ein erstes Beispiel

Um das Ganze mal in der Praxis zu sehen, muss man natürich ein paar Worte kennen, die Forth ebenfalls kennt. Auch in der Fahrschule musste der Fahrlehrer erst sicher sein, dass sie wissen, was 'Gas geben' bedeutet, wenn er es von ihnen verlangte.

In diesem ersten, sehr einfachen Beispiel sollen noch nicht so viele Worte eingeführt werden, sondern gerade mal so viele, wie für das Beispiel nötig sind -- Keine Angst, es sind nicht viele.

Das erste Wort, dass sie kennen lernen ist ." (ein Punkt gefolgt von einem doppelten Anführungszeichen). Dieses Wort verlangt, dass danach eine Zeichenkette angegeben wird, die dann wieder mit einem doppelten Anführungszeichen beendet wird. Bevor das Ganze geübt werden kann noch eine Bemerkung: Wie weiß Forth, dass ein Wort zu Ende ist? Nun, das ist ganz einfach: Worte werden in Forth immer durch Leerzeichen abgetrennt. Das ist zwar sehr einfach, führt aber, vor allem bei Anfängern immer wieder zu Fehlern. Probieren wir das neue Wort einfach mal aus; geben sie das Folgende ein:

  ." Hallo Welt"[RETURN] Hallo Welt ok

Was ist passiert? Nachdem sie die Eingabetaste gedrückt haben, wurde einfach alles hinter dem Wort ." erneut ausgegeben und das war es. Das ist auch richtig so, denn ." ist eine Methode, um in Forth eine Zeichenkette auszugeben. Die Zeichenkette muss, wie schon oben gesagt, dem Wort einfach nachgestellt werden, achten sie aber auf das Leerzeichen zwischen ." und der Zeichenkette. Vor dem abschließenden Anführungszeichen muss kein Leerzeichen, denn das ist kein Wort sondern schließt einfach nur die Zeichenkette ab.

Nun, damit haben wir die Pflichtübung ein "Hello World"-Programm zu schreiben, erledigt und können uns den weiteren Aufgaben widmen. Das nächste Wort, dass sie kennen lernen ist SPACES. Dieses Wort erwartet eine Zahl auf dem Stack (Siehe letztes Kapitel) und gibt die entsprechende Anzahl von Leerzeichen auf dem Bildschirm aus. Auch das sollte mach sich ansehen:

  1 SPACES[RETURN]   ok
  2 SPACES[RETURN]    ok
  5 SPACES[RETURN]       ok

Ein letztes Wort will ich ihnen noch beibringen und dann kann es mit dem ersten richtigen Forth-Programm losgehen. Das Wort heißt EMIT. Es erwartet ebenfalls eine Zahl auf dem Stack und gitb dann das Zeichen aus, das in der ASCII-Kodierung dieser Zahl entspricht. Auch dazu ein paar Beispiele:

  42 EMIT[RETURN] * ok
  62 EMIT[RETURN] > ok
  100 EMIT[RETURN] d ok

So, nun geht es los und dazu werden dann allerdings noch zwei Worte gebraucht, die hier aber nicht in alle Vollständigkeit erkärt werden, sehen sie es ich einfach mal an:

  : stern 42 EMIT ;[RETURN] ok

So unglaublich es vielleicht scheinen mag, aber wenn sie die obige Zeile eingegeben haben, dann haben sie ihr erstes Forth-Programm schon geschrieben; es heißt stern. Aber der Reihe nach: Das erste Forth-Wort, das sie eingegeben haben und dass sie bisher nicht kannten, war : (Der Doppelpunkt). Dies ist das erste Wort, das erst an späterer Stelle genauer erklärt wird. Hier reicht es zu wissen, dass sie Forth damit sagen, dass sie ein neues Wort, oder eben ein Programm beginnen wollen. Danach folgte dann stern. An dieser Stelle hat es nur die Bedeutung, dass sie Forth sagen, wie das neue Wort heißen soll. Dann kommt der Teil, den sie schon von oben kannten: 42 EMIT. Oben haben sie gesehen, dass damit ein Sternchen auf dem Bildschirm ausgegeben wird. Als letztes kam dann das ; (Ein Semikolon). Dieses Wort sagt Forth nur, dass die Neudefinition eines Wortes beendet ist, also hier die Definition von stern.

Tja, aber wo ist denn nun das neue Wort und wieso wurde kein Stern ausgegeben, als sie 42 EMIT eingegeben haben. Alles, was Forth sagte, war ok.

Die Antwort ist so einfach, wie verblüffend. Geben sie mal das folgende ein:

  stern[RETURN] * ok

Sie sehen, dass Forth das Wort stern nun genau so kennt, wie die Worte, die ich ihnen vorher erklärt habe und es macht auch das, was vorher vereinbart war, es gibt ein Sternchen aus. Es ist ein neues Forth-Wort, oder, wenn ihnen die Bezeichung lieber ist, ein neues Forth-Programm.

Dass sich wirklich um ein neues Forth-Wort handelt, das genau so arbeitet, wie andere Forth-Worte auch, soll auch noch gezeigt werden, man kann es sogar in neuen Definitionen verwenden. Probieren sie mal das folgende aus und überlegen sich vorher, was passiert, wenn sie danach snw eingeben.

  : snw stern stern stern ." Hallo Welt" stern stern stern ;

Na, haben sie es probiert und versucht heraus zu bekommen, was passieren wird? Wenn sie alles richtig gemacht haben, dann sollte das Ergebnis so aussehen:

  snw[RETURN] ***Hallo Welt*** ok

Und eigentlich sollte das nun auch schon klar sein. Eine Winzigkeit fehlt natürlich noch: Was bedeutet snw, nun, ich habe mir den Scherz erlaubt, sie ein Programm schreiben zu lassen, dessen Name eine Abkürzung für Schöne neue Welt sein soll.

Sie könnten nun mal ein bisschen mit Forth rumspielen und auch noch das Wort SPACES mit in eine weitere Definition einbauen. Vielleicht:

  : ganzschoen stern 1 SPACES stern 2 SPACES stern ." Gut!!!" ;

Aufgaben

  1. Der ASCII-Wert des Pluszeichens ('+') ist 43. Schreiben sie eine Definition des Wortes PLUSZ, die ein Pluszeichen, gefolgt von einem Leerzeichen ausgibt. [Lösung]
  2. Schreiben sie ein Wort PLUSWELT, das die folgende Ausgabe hat. [Lösung]
          PLUSWELT
          + + + Hallo Welt + + +  ok