OSDN Git Service

still trying to make the sieve stuff work.
[bif-6809/bif-6809.git] / testsource / rs_sieve_bif.fs
index 41e0895..532ca3d 100644 (file)
@@ -1,22 +1,25 @@
-( 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