70 lines · 1.3 KB · Forth
RawDownload
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