1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2%% 3%% Sieve of eratosthenes to compute primes 4%% thom fruehwirth 920218-20, 980311 5%% christian holzbaur 980207 for Sicstus CHR 6%% 7%% ported to hProlog by Tom Schrijvers 8 9:- module(primes,[primes/0]). 10:- use_module(library(chr)). 11 12:- chr_constraint candidate/1. 13:- chr_constraint prime/1. 14:- chr_constraint cleanup/1. 15 16:- chr_option(debug,off). 17:- chr_option(optimize,full). 18 19candidate(1) <=> true. 20candidate(N) <=> prime(N), N1 is N - 1, candidate(N1). 21 22absorb @ prime(Y) \ prime(X) <=> 0 =:= X mod Y | true. 23 24cleanup(_L), candidate(_X) <=> fail. 25cleanup(L), prime(N) <=> L = [N|T], cleanup(T). 26cleanup(L) <=> L = []. 27 28primes :- 29 candidate(100), 30 cleanup(L), 31 sort(L,SL), 32 SL == [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]. 33 34 35 36 37 38 39 40 41 42