\section{Besprechung von \emph{FORTH Applications} von S.\ D.\ Roberts}

\parpic[r]{\includegraphics[width=3.8cm]{2008-01/roberts}}Schon 1989 erschien das Buch \emph{FORTH Applications}  (ISBN 0-911827-00-5) von S.\ D.\ Roberts bei Elcomp Publishing. Noch heute kann man es bei Amazon.com für \$9.95 plus Porto/Verpackung kaufen.

In dem 154 Seiten dünnen, englisch--sprachigen Büchlein erläutert Roberts zunächst die Implementierung von Zahlen-- und Text--Ein-- und --Ausgaben in Forth, spricht dann über Strings und geht auf Forth--Realisierungen der dynamische Datenstrukturen \emph{gelinkte Liste}, \emph{binäre Bäume} (inkl.\ \emph{AVL--Bäume}) ein.

Das nächste Kapitel widmet sich Entscheidungsbäumen und gibt zwei kurze Beispiele aus dem Bereich der \emph{künstlichen Intelligenz}: Klassifizierung von Mineralien und Fehlerdiagnose einer elektrischen Schaltung. Es endet mit einer knappen Beschreibung assoziativer Strukturen zwischen Worten.

Im Kapitel \emph{Tools for Development} werden Abwandlungen von bereits in den Forth Dimensions erschienenen Definitionen für das Setzen von Breakpoints [1] und das Suchen von Texten in Screens [2] vorgestellt.

Tabellengestützte Berechnung von Festpunkt--Sinus beziehungsweise --Cosinus und  die Programmierung einer \emph{Turtle--Graphic} ist das Thema des folgenden Kapitels. Die grafische Darstelling basiert auf einer CGA--(=Color Graphics Adapter)--Graphik mit den Zeichenprimitiven \verb|WHITE|, \verb|BLACK|, \verb|HGR|, \verb|PLOT| und \verb|LINE|. Leider wiederholt diese Implementierung die wiederholt anzutreffende Ungeschicktheit, die Werte der Sinus--Tabelle auf dezimal 10000 zu skalieren, anstatt auf hexadezimal 10000, und so $\frac{5}{6}$ der Genauigkeit verschenkt werden. 

Anhand der \emph{Türme von Hanoi} wird  dann die Definition 
direkt--rekursiver Worte 
beschrieben. Es wird das Wort \verb|SELF| definiert, das 
erlaubt, einen rekursiven Aufruf des aktuell definierten Wortes zu kompilieren. Außerdem wird die \verb|SMUDGE|--Technik beschrieben, um den Namen der aktuellen Definition bereits während der Definition des aktuellen Wortes sichtbar zu machen. Heutige Standard--Systeme handhaben Rekursion mithilfe des \verb|SELF| entsprechenden Wortes \verb|RECURSE| und benötigen die hier beschrieben Technik nicht mehr.

Das nächste Kapitel widmet sich einem Programm zum formatierten Drucken von Rechnungen. Die Daten werden in einer Beldschirmmaske erfasst in Forth--Böcken abgelegt und dann selektiv zum Drucken aufbereitet.

Ein kleines Zahlenspiel, in dem die Ziffern \verb|0| und \verb|1| in einer 3x3--Matrix nach vorgegebenen Regeln in eine Zielkombination gebracht werden müssen, ist Gegenstand des nur 5 Seiten umfassenden Kapitels \emph{Brain Teaser}\/.

Den Abschluss bildet ein minimalistisches \verb|BLOCK|--basiertes Datenbanksystem und eine darauf aufsetzende Adressverwaltung.

Die Beispiele im Buch sind teilweise für MVP--Forth, teilweise für LMI--Forth (Forth--83) formuliert. Sie sind durchgängig in GROSSBUCHSTABEN geschrieben, was die Lesbarkeit nicht unbedingt fördert. Stack--Kommentare finden sich gelegentlich, ansonsten sind die Beispiele im wesentlichen unkommentiert und nur im Prosatext erläutert. Dadurch erschließen sich die Beispiele nicht unmittelbar und müssen intensiv durchgearbeitet werden, um sie zu genau zu verstehen.

Alles in Allem ist \emph{FORTH Applications} eine Sammlung von diversen, durchaus auch interessanten, älteren Forth--83/FIG--Forth--Programmen. Zum Ende des Buches gewinnt man allerdings den Eindruck, als würden  nicht näher zusammenhängende Programme einfach aneinandergereiht.

Eher akademische Beispielprogramme als \emph{Applications} zu bezeichnen, ist sicher irreführend. Unter Applikationen würde man wohl eher praktisch einsetzbare Anwendungen verstehen.  Dennoch ist das Buch eine interessante Lekture für den Forther, der sich von unterschiedlichen Forth--Dialekten nicht abschrecken lässt und dem es nichts ausmacht, sich durch schlecht kommentierten und aus heutiger Sicht schlecht formatierten Forth-Quellcode durchzubeißen.
\hfill Ulrich Hoffmann\medskip

{\bf Literatur}\\
{[1]} \emph{Breakpoint}\/, Forth Dimensions, V5\#1\\
{[2]} \emph{An Easy Directory System}, Forth Dimensions, V5\#3







