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 ..