-( from rosetta code )
-: prime? ( n -- ? )
+( FROM ROSETTA CODE )
+
+( https://rosettacode.org/wiki/Sieve_of_Eratosthenes#Forth )
+
+: PRIME? ( N -- ? )
HERE + C@ 0= ;
-: composite! ( n -- )
+: COMPOSITE! ( N -- )
HERE + 1 SWAP C! ;
-( : 2dup OVER OVER ; )
+: 2DUP OVER OVER ;
-: showPrimes
- ." Primes: "
- 2 DO I prime?
+: SHOWPRIMES
+ ." PRIMES: "
+ 2 DO I PRIME?
IF I . ENDIF
LOOP ;
-: countPrimes
- ." Prime count: "
+: COUNTPRIMES
+ ." PRIME COUNT: "
0 SWAP
- 2 DO I prime?
+ 2 DO I PRIME?
IF 1+ ENDIF
LOOP
. ;
-
-
-
-: sieve ( n -- )
+: SIEVE ( N -- )
HERE OVER ERASE
2
BEGIN
- 2dup DUP * >
+ 2DUP DUP * >
WHILE
- DUP prime? IF
- 2dup DUP * DO
- I composite!
+ DUP PRIME? IF
+ 2DUP DUP * DO
+ I COMPOSITE!
DUP +LOOP
ENDIF
1+
REPEAT
DROP
;
+-->
+( SIEVE DEFINED. )
+
+( EDIT SIEVE COUNT TO DO MORE )
+
+( SIEVE IS KEPT IN THE )
+( FREE RAM AREA, )
+( WITH THE EXPECT-ED )
+( CONSEQUENCES. )
+
+( MAY MISBEHAVE )
+( IF RUN TWICE IN A ROW )
+( WITHOUT REPEAL-ING BACK. )
-100 sieve
+( OKAY UP TO AT LEAST 8192. )
+100 SIEVE
-dup
+DUP
-showPrimes
+SHOWPRIMES
-countPrimes
+COUNTPRIMES