|
Variablenwertes auf den Stack.) Im Interpretermodus wird diese Funktion
nun sofort ausgeführt. Wenn die Funktion "Werte" benötigt,
nimmt sie sie vom Stack. Diese Werte müssen also vorher in der
richtigen Reihenfolge eingegeben worden sein oder von einer anderen
Funktion auf dem Stack hinterlassen worden sein (UPN). Wenn die
jeweilige Funktion einen Wert als Ergebnis hat, gibt sie ihn ebenfalls
auf den Stack. In der Regel - es gibt aber Ausnahmen - soll eine
Funktion ihre Argumente "aufbrauchen". Eine Funktion kann
auch ein Wort als Argument fordern (in der Regel ebenfalls eine
Funktion), das dann aber nicht vorangestellt wird, sondern auf den
Funktionsnamen folgt.
Das Besondere an FORTH ist nun, daß diese
"Programmiersprache" durch sich selbst erweiterbar ist. Mit
Hilfe der "definierenden Funktionen" (in unserem Fall
":", MCODE, MESSAGE, VARIABLE, CONSTANT) werden neue
Funktionen erzeugt, die ebenfalls einen Namen erhalten, der in das
Dictionary eingetragen wird. Es gibt, genau genommen, gar keine
Unterscheidung zwischen "Programmen" und
"Funktionen", also eigentlich gar keine "Programme"
im üblichen Sinne, sondern nur ein Anwachsen der Funktionen des
Interpreters und ihrer Namen im Dictionary. Ist FORTH denn nun
überhaupt eine "Programmiersprache"? Ich glaube, das hängt
davon ab, wie man das System anwendet. Geht man immer von einem
bestimmten Standard-Wortschatz aus, wenn man den Computer eine
bestimmte Aufgabe lösen lassen will, dann kann man sicher von einer
"Programmiersprache" im üblichen Sinne sprechen. Man kann den
Interpreter aber auch als eine Art komfortables Betriebssystem
auffassen oder als eine Bibliothek von Unterprogrammen. Dann wird das
System bei jedem Anwender sehr schnell eine individuelle Gestalt
annehmen, die den jeweiligen Bedürfnissen angepaßt ist. Die im
folgenden beschriebene Funktion stellt eine solche individuelle
Erweiterung dar, die nun wirklich nichts mehr mit dem Standard-FORTH zu
tun hat:
: TESTKL DUP 96 > IF
125 < IF ZERO ELSE NEGONE THEN
ELSE POP NEGONE THEN ;
ZERO VARIABLE LASTC
: MISCHTEXT REPEAT CIN DUP TESTKL UNTIL
COUT LOOP DUP 32 EQ IF LASTC PEEKW 32 EQ IF
| |
COUT MISCHTEXT THEN THEN DUP LASTC POKEW ;
: , 23 COUT READLINE ;
CADR MISCHTEXT CADR READLINE 16 + POKEW
TESTKL ist eine Hilfsfunktion, die
prüft, ob es sich bei dem obersten Stackwert um das Zahlenäquivalent
eines Kleinbuchstabens handelt, und entsprechend 0 oder -1 (FFFFH) auf
den Stack gibt. Mit Hilfe dieser Funktion wird nun MISCHTEXT definiert.
Dies ist eine Eingaberoutine, die Kleinbuchstaben und überflüssige
Leerzeichen ignoriert. Sie wird in die Funktion READLINE an Stelle der
normalen Eingaberoutine CIN hineinkopiert. Beide Interpreter und der
Compiler ignorieren nun Kleinschrift, so daß man damit beliebig
Kommentare einfügen kann, ja man kann sogar in gut verständlichen
"ganzen Sätzen" Programme schreiben. Anders als bei
Kommentaren in Basic wird dadurch weder der Speicherbedarf vergrößert
noch die Ausführung eines Programms verlangsamt. Reizvoll wäre es z.B.
auch, die englischen Namen im Dictionary durch deutsche zu ersetzen
(dann wird das Wörterverzeichnis allerdings erheblich länger).
Die Funktion "," koppelt zwei Befehlszeilen oder zwei
Funktionsdefinitionen aneinander. Man kann damit z.B. eine ganze
Bildschirmseite mit Befehlen vollschreiben, wobei man jede Zeile mit
einem Komma abschließt, und dann die ganze Seite auf einmal abarbeiten
lassen (EDITOR-Modus!). Ebenso kann man mehrere Definitionen
miteinander verbinden, wenn man hinter das abschließende Semicolon
einer Definition ein Komma setzt. All diese Funktionen sind für den
EDITOR-Modus, weniger für den INTERACT-Modus geeignet, da sich dann
beim Löschen mit "Backspace" in einigen Fällen Fehler ergeben
können.
(Oben kommt wie an einigen anderen Stellen die Funktion
"<" vor; gemeint ist immer "<=", ich habe das
bloß bei mir noch nicht korrigiert!)
Zum Abschluß möchte ich noch die angekündigte LIFE-Variante bringen.
Das Besondere an dieser Version ist, daß als "Lebensraum"
annähernd eine Kugeloberfläche simuliert wird. Zellgebilde, die z.B.
über den oberen Bildschirmrand hinauswandern, tauchen am unteren
Bildschirmrand wieder auf; ebenso gilt dies für den linken und rechten
Bildschirmrand. Nur an den vier Eckpunkten ergeben sich
Unregelmäßigkeiten. Das Programm läuft im Editormodus und benutzt die
Zeilen
|