: ^ ( n1 u -- n ) \ n = the uth power of n1 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: Counted Loops.