: ^ ( 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
times (or not at all, if
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
: 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.