1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% Sieve of eratosthenes to compute primes
%% thom fruehwirth 920218-20, 980311
%% christian holzbaur 980207 for Sicstus CHR
%%
%% ported to hProlog by Tom Schrijvers
%% Updated to current CHR and added how to extract the primes by
%% Jan Wielemaker.
:- module(primes,
[ candidate/1, % +Max
primes/2 % +Max, -ListOfPrimes
]).
:- use_module(library(chr)).
:- chr_constraint candidate/1.
:- chr_constraint prime/1.
candidate(1) <=> true.
candidate(N) <=> prime(N), N1 is N - 1, candidate(N1).
absorb @ prime(Y) \ prime(X) <=> 0 is X mod Y | true.
primes(Max, Primes) :-
findall(P,
( candidate(Max),
current_chr_constraint(prime(P))),
Primes).
|