205a
<< <> >>

205

Die Programmiersprache Forth
home

Kontrollstrukturen II

4. WHILE

WHILE ist die Lösung, auf die ich das letzte Mal abzielte. Es ist ein IF, das seine Post an den Compiler nicht ganz nach oben, sondern direkt unter die oberste Post legt. Sie können WHILE daher nur innerhalb einer anderen Kontrollstruktur verwenden. Die andere Struktur muss wieder abgeschlossen sein, bevor das zugehörige THEN kommt. WHILE schachtelt sich über Kreuz und dient dazu, aus einer Struktur nach THEN zu springen:
: WHILE ( -- )
  POSTPONE IF
  1 CS-ROLL ; IMMEDIATE

 .. BEGIN .. WHILE .. AGAIN THEN ..
      1        2        1     2
Die Ziffern geben an, wie die Worte zueinander gehören. WHILE ist innerhalb aller anderen Kontrollstrukturen verwendbar. Beispiele:
a) .. BEGIN .. WHILE .. UNTIL .. THEN ..
        1        2        1        2

b) .. BEGIN .. WHILE .. AGAIN  ELSE .. THEN ..
        1        2        1      2       2

c) .. BEGIN .. WHILE .. WHILE .. AGAIN  THEN .. THEN ..
        1        2        3        1      3       2
In c) legt WHILE-2 seine Post unter BEGIN-1 ab, WHILE-3 legt seine Post auch unter BEGIN-1 ab, also oberhalb von WHILE-2. Die beiden WHILEs sind untereinander wieder normal geschachtelt.

Fangfrage:
Was ist der Unterschied zwischen OEL und ESSIG?
: OEL   aaa IF bbb IF ccc THEN THEN ddd ;
: ESSIG aaa IF bbb WHILE ccc THEN THEN ddd ;
Bemerkung:
REPEAT (ein Standardwort) steht für AGAIN THEN.
.. BEGIN .. WHILE .. REPEAT ..
>>