anew task-tut.fth: SUM.OF.N.A ( N -- SUM[N] , calculate sum of N integers ) 0 \ starting value of SUM BEGIN OVER 0> \ Is N greater than zero? WHILE OVER + \ add N to sum SWAP 1- SWAP \ decrement N REPEAT SWAP DROP \ get rid on N ;: SUM.OF.N.B ( N -- SUM[N] ) 0 SWAP \ starting value of SUM 1+ 0 \ set indices for DO LOOP ?DO \ safer than DO if N=0 I + LOOP;: SUM.OF.N.C ( N -- SUM[N] ) 0 \ starting value of SUM BEGIN ( -- N' SUM ) OVER + SWAP 1- SWAP OVER 0< UNTIL SWAP DROP;: SUM.OF.N.D ( N -- SUM[N] ) >R \ put NUM on return stack 0 \ starting value of SUM BEGIN ( -- SUM ) R@ + \ add num to sum R> 1- DUP >R 0< UNTIL RDROP \ get rid of NUM;: SUM.OF.N.E { NUM | SUM -- SUM[N] , use return stack } BEGIN NUM +-> SUM \ add NUM to SUM -1 +-> NUM \ decrement NUM NUM 0< UNTIL SUM \ return SUM;: SUM.OF.N.F ( NUM -- SUM[N] , Gauss' method ) DUP 1+ * 2/;: TTT 10 0 DO I SUM.OF.N.A . I SUM.OF.N.B . I SUM.OF.N.C . I SUM.OF.N.D . I SUM.OF.N.E . I SUM.OF.N.F . CR LOOP;TTT
anew task-tut.fth
: SUM.OF.N.A ( N -- SUM[N] , calculate sum of N integers )
0 \ starting value of SUM
BEGIN
OVER 0> \ Is N greater than zero?
WHILE
OVER + \ add N to sum
SWAP 1- SWAP \ decrement N
REPEAT
SWAP DROP \ get rid on N
;
: SUM.OF.N.B ( N -- SUM[N] )
0 SWAP \ starting value of SUM
1+ 0 \ set indices for DO LOOP
?DO \ safer than DO if N=0
I +
LOOP
;
: SUM.OF.N.C ( N -- SUM[N] )
0 \ starting value of SUM
BEGIN ( -- N' SUM )
OVER +
SWAP 1- SWAP
OVER 0<
UNTIL
SWAP DROP
;
: SUM.OF.N.D ( N -- SUM[N] )
>R \ put NUM on return stack
0 \ starting value of SUM
BEGIN ( -- SUM )
R@ + \ add num to sum
R> 1- DUP >R
0<
UNTIL
RDROP \ get rid of NUM
;
: SUM.OF.N.E { NUM | SUM -- SUM[N] , use return stack }
BEGIN
NUM +-> SUM \ add NUM to SUM
-1 +-> NUM \ decrement NUM
NUM 0<
UNTIL
SUM \ return SUM
;
: SUM.OF.N.F ( NUM -- SUM[N] , Gauss' method )
DUP 1+ * 2/
;
: TTT
10 0
DO
I SUM.OF.N.A .
I SUM.OF.N.B .
I SUM.OF.N.C .
I SUM.OF.N.D .
I SUM.OF.N.E .
I SUM.OF.N.F .
CR
LOOP
;
TTT