File: primes.chr

package info (click to toggle)
swi-prolog 9.2.9%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 84,456 kB
  • sloc: ansic: 401,705; perl: 374,799; lisp: 9,080; cpp: 8,920; java: 5,525; sh: 3,282; javascript: 2,690; python: 2,655; ruby: 1,594; yacc: 845; makefile: 440; xml: 317; sed: 12; sql: 6
file content (29 lines) | stat: -rw-r--r-- 838 bytes parent folder | download
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).