www.delorie.com/gnu/docs/gforth/gforth_31.html   search  
 
Buy GNU books!


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     delorie software   privacy  
  Copyright 2003   by The Free Software Foundation     Updated Jun 2003