Erst die Daten, dann der Ausführungsbefehl.
Diese Grundregel von Forth findet auch beim Treffen von Entscheidungen
in Programmen mit Hilfe von bedingten Sprüngen Anwendung.
Ein Flag auf dem Stack ist das 'Datenfutter' für
die 'Operatoren'
IF oder
UNTIL,
die daraufhin entscheiden, ob gesprungen werden soll oder nicht.
In vielen Programmiersprachen haben wir die Konstruktion:
IF \ Bestimme den Flag-Wert von 'KALT'.
KALT \ Formulierung des Flags
THEN \ Verlasse die Konstruktion, wenn flag=false
SCHAL-UM \ Bedingt auszufuehrender Code
ENDIF \ Endpunkt; koennte auch ENDTHEN heissen
In Forth gehört die Bestimmung des Flag-Wertes
nicht zur Grammatik der Konstruktion.
Es gibt lediglich den Operator
IF mit seinem Abschlusselement
THEN. Der Programmierer muss dafür sorgen, dass ein Flag bereitsteht:
( KALT? \ Flag auf Stack )
IF \ Spring bei 'false' vorwaerts nach THEN
SCHAL-UM \ Bedingt auszufuehrender Code
THEN \ Endpunkt; koennte auch ENDIF heissen
Der Rückwärtssprung mit
UNTIL geht in Forth analog:
BEGIN \ Anfangspunkt
... WARM? \ Der Programmierer sorgt dafuer, dass
\ dieser Code ein Flag produziert
UNTIL \ Spring bei 'false' zurueck nach BEGIN
( SCHAL-AB )
Sie können diese Strukturen ineinander schachteln.
Wenn Sie das sauber tun, wie in
... BEGIN ... IF ... THEN ... UNTIL ...,
heißt das strukturierte Programmierung.
In
... BEGIN ... IF ... UNTIL ... THEN ...
wird Forth protestieren, wenn es auf
UNTIL trifft,
denn das
IF ist noch nicht abgeschlossen.
Und in
... IF ... IF ... THEN ... THEN ...
gehört das erste
THEN darum zum zweiten
IF.