for
loop, you may get the loop counter with the word r@
.
It counts from u-1 down to 0.
If you exit
from a for
loop, you must drop the loop count with rdrop
.
Code | Description |
cond if xxx else yyy then |
Conditional execution. |
---|---|
begin xxx again |
Infinite loop. |
begin xxx cond until |
Loop until cond is true. |
begin xxx cond while yyy repeat |
Loop while cond is true, yyy is not executed on the last iteration.
|
u for xxx next |
Loop u times. |
leave |
Sets loop counter to zero so that we leave the loop when next is encountered. |
exit |
Exit from a word. |
Here are a couple of examples of counted loops,
one constructed from the generic begin
...until
construct,
and the other using the dedicated for
...next
construct.
Note the difference in counter ranges.
-countdown ok<#,ram> marker -countdown ok<#,ram> : countdown1 ( n --) begin cr dup . 1- dup 0= until drop ; ok<#,ram> 5 countdown1 5 4 3 2 1 ok<#,ram> : countdown2 ( n --) for cr r@ . next ; ok<#,ram> 5 countdown2 4 3 2 1 0 ok<#,ram>It was convenient, when setting up these examples, to put the source code into a little file that could be reloaded easily each time the source text was changed.
-countdown marker -countdown : countdown1 ( n --) begin cr dup . 1- dup 0= until drop ; 5 countdown1 : countdown2 ( n --) for cr r@ . next ; 5 countdown2