| www.delorie.com/gnu/docs/gforth/gforth_30.html | search |
![]() Buy GNU books! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The endless loop is the most simple one:
: endless ( -- )
0 begin
dup . 1+
again ;
endless
|
Terminate this loop by pressing Ctrl-C (in Gforth). begin
does nothing at run-time, again jumps back to begin.
A loop with one exit at any place looks like this:
: log2 ( +n1 -- n2 )
\ logarithmus dualis of n1>0, rounded down to the next integer
assert( dup 0> )
2/ 0 begin
over 0> while
1+ swap 2/ swap
repeat
nip ;
7 log2 .
8 log2 .
|
At run-time while consumes a flag; if it is 0, execution
continues behind the repeat; if the flag is non-zero, execution
continues behind the while. Repeat jumps back to
begin, just like again.
In Forth there are many combinations/abbreviations, like 1+.
However, 2/ is not one of them; it shifts it's argument right by
one bit (arithmetic shift right):
-5 2 / . -5 2/ . |
assert( is no standard word, but you can get it on systems other
then Gforth by including `compat/assert.fs'. You can see what it
does by trying
0 log2 . |
Here's a loop with an exit at the end:
: log2 ( +n1 -- n2 )
\ logarithmus dualis of n1>0, rounded down to the next integer
assert( dup 0 > )
-1 begin
1+ swap 2/ swap
over 0 <=
until
nip ;
|
Until consumes a flag; if it is non-zero, execution continues at
the begin, otherwise after the until.
Reference: 5.8.2 Simple Loops.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |