|
Sieve of Eratosthenese by parallel (||) processes.
let rec
from = lambda n. fromchan!n -> from (n+1),
fromchan = chan,
sieve = lambda inch.
inch?p -> output!p {must be prime} ->
let rec
filter = inch?x ->
if (x/p)*p<>x then {not p|x} connect!x -> filter
else filter,
connect = chan
in (filter || sieve connect)
in from 2 || sieve fromchan
{\fB Parallel Sieve of Eratosthenese. \fP}
example c1993.
|
A process is set up for each new prime -- to
remove duplicates of that prime.
|
pfl...
| | |
choice |
|| | parallel |
-> | sequence |
? | input act |
! | output act |
chan | new channel |
|
|
|