File: tut.fth

package info (click to toggle)
pforth 21-11
  • links: PTS
  • area: main
  • in suites: lenny, squeeze, wheezy
  • size: 820 kB
  • ctags: 873
  • sloc: ansic: 5,050; makefile: 102
file content (70 lines) | stat: -rw-r--r-- 1,264 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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