| www.delorie.com/gnu/docs/gforth/gforth_31.html | search |
![]() Buy GNU books! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
: ^ ( n1 u -- n )
\ n = the uth power of u1
1 swap 0 u+do
over *
loop
nip ;
3 2 ^ .
4 3 ^ .
|
U+do (from `compat/loops.fs', if your Forth system doesn't
have it) takes two numbers of the stack ( u3 u4 -- ), and then
performs the code between u+do and loop for u3-u4
times (or not at all, if u3-u4<0).
You can see the stack effect design rules at work in the stack effect of the loop start words: Since the start value of the loop is more frequently constant than the end value, the start value is passed on the top-of-stack.
You can access the counter of a counted loop with i:
: fac ( u -- u! )
1 swap 1+ 1 u+do
i *
loop ;
5 fac .
7 fac .
|
There is also +do, which expects signed numbers (important for
deciding whether to enter the loop).
You can also use increments other than 1:
: up2 ( n1 n2 -- )
+do
i .
2 +loop ;
10 0 up2
: down2 ( n1 n2 -- )
-do
i .
2 -loop ;
0 10 down2
|
Reference: 5.8.3 Counted Loops.
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |