-module(primes). -export([start/0, primes/0,sieve/1,allNumbers/1]). start() -> P=spawn(primes,primes,[]), %P=spawn(primes,filterStart,[2]), show(P,1). show(P,M) -> P!{get,self()}, receive N -> io:format("Step ~w: ~w~n",[M,N]), case N>80000000 of false -> show(P,M+1); true -> ok end end. nextNumber(N,GenPid) -> GenPid!{get,self()}, receive M -> case M rem N of 0 -> nextNumber(N,GenPid); _ -> M end end. allNumbers(N) -> receive {get,P} -> P!N, allNumbers(N+1) end. sieve(Numbers) -> receive {get,P} -> Numbers!{get,self()}, receive Primzahl -> NextPrim=spawn(primes,sieve,[self()]), P!{primzahl,Primzahl,NextPrim}, numbers(Primzahl,Numbers) end end. numbers(Primzahl,Numbers) -> receive {get,P} -> P!nextNumber(Primzahl,Numbers), numbers(Primzahl,Numbers) end. primes() -> AllNumbers=spawn(primes,allNumbers,[2]), Primes=spawn(primes,sieve,[AllNumbers]), collectAllPrimes(Primes). collectAllPrimes(P) -> receive {get,P1} -> P!{get,self()}, receive {primzahl,Primzahl,P2} -> P1!Primzahl, collectAllPrimes(P2) end end.