
Primes Sieve of Eratosthenes
/* Primes Sieve of Eratosthenes
*  8-9-97 j.n.magee
*/
const MAX = 10
range T = 2..MAX
GEN      = GEN[2],
GEN[x:T] = ([x] -> if x<MAX then GEN[x+1]).
FILTER      = (in[p:T]->out[p]->FILTER[p]),
FILTER[p:T] = (in[x:T] -> 
		 if x%p!=0 then 
                    (pass[x]->FILTER[p]) 
                 else 
                    FILTER[p]
               ).
||PRIMES(N=3) = if N==1 then
		  (in:GEN || FILTER )
	        else
                  (PRIMES(N-1) /{mid/pass, prime/out} || FILTER/{mid/in})  
                 @{out,pass,prime}.
/* 
Compile SIEVE and Check Run, Safety or Draw to display primes
*/
||SIEVE = PRIMES(4)/{prime/out}.