205a
<< <> >>

205

De programmeertaal Forth
home

Controlestructuren II

4. WHILE

WHILE is de oplossing waar ik de vorige keer op doelde. Het is een IF die zijn compilerpost niet helemaal bovenop, maar vlak onder de bovenste post legt. Je kunt WHILE daarom alleen binnen een andere Controlestructuur gebruiken. Die andere structuur moet weer afgesloten zijn voordat de bijbehorende THEN komt. WHILE nest zich kruislings, en dient ervoor om uit een structuur naar THEN te springen:
: WHILE ( -- )
  POSTPONE IF
  1 CS-ROLL ; IMMEDIATE

 .. BEGIN .. WHILE .. AGAIN  THEN ..
      1        2        1      2
De cijfers geven aan hoe de woorden bij elkaar horen. WHILE is bruikbaar binnen alle andere controlestructuren. Voorbeelden:
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 zijn post onder BEGIN-1, WHILE-3 legt zijn post ook onder BEGIN-1, dus bovenop WHILE-2. De beide WHILE's zijn onderling weer normaal genest.

Strikvraagje:
Wat is het verschil tussen OLIE en AZIJN ?
: OLIE  aaa IF bbb IF ccc THEN THEN ddd ;
: AZIJN aaa IF bbb WHILE ccc THEN THEN ddd ;
Opmerking:
REPEAT (een standaardwoord) staat voor AGAIN THEN.
.. BEGIN .. WHILE .. REPEAT ..
>>