www.delorie.com/gnu/docs/gforth/gforth_31.html search
Gforth Manual

 [ < ] [ > ] [ << ] [ Up ] [ >> ] [Top] [Contents] [Index] [ ? ]

## 3.19 Counted loops

 ```: ^ ( 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).

Assignment:
Write a definition for computing the nth Fibonacci number.

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