Prolog 给定范围的素数列表序言

Prolog 给定范围的素数列表序言,prolog,primes,Prolog,Primes,我不熟悉Prolog,我需要为给定范围创建一个素数列表。 范例 我完成了。我会把答案贴出来,以防别人需要 is_prime(2). is_prime(3). is_prime(P) :- integer(P), P > 3, P mod 2 =\= 0, \+ has_factor(P,3). has_factor(N,L) :- N mod L =:= 0. has_factor(N,L) :- L * L < N,

我不熟悉Prolog,我需要为给定范围创建一个素数列表。 范例


我完成了。我会把答案贴出来,以防别人需要

is_prime(2).
is_prime(3).
is_prime(P) :- 
    integer(P), 
    P > 3, 
    P mod 2 =\= 0, 
    \+ has_factor(P,3).  

has_factor(N,L) :- N mod L =:= 0.
has_factor(N,L) :- 
    L * L < N, 
    L2 is L + 2, 
    has_factor(N,L2).

prime_list(A,B,L) :- 
    A1 is (A // 2) * 2 + 1, 
    p_list(A1,B,L).


p_list(A,B,[]) :- A > B, !.
p_list(A,B,[A|L]) :- 
    is_prime(A), !, 
    next(A,A1), 
    p_list(A1,B,L).

p_list(A,B,L) :- 
    next(A,A1), 
    p_list(A1,B,L).

next(2,3) :- !.
next(A,A1) :- A1 is A + 2.
是素数(2)。
是素数(3)。
是素数(P):-
整数(P),
P>3,
P mod 2=\=0,
\+has_因子(P,3)。
has_因子(N,L):-N模L=:=0。
has_因子(N,L):-
L*LB!。
p|u列表(A,B,[A|L]):
是素数(A)!,
接下来(A,A1),
p_列表(A1、B、L)。
p_列表(A、B、L):-
接下来(A,A1),
p_列表(A1、B、L)。
下一个(2,3):-!。
下一个(A,A1):-A1是A+2。
is_prime(2).
is_prime(3).
is_prime(P) :- 
    integer(P), 
    P > 3, 
    P mod 2 =\= 0, 
    \+ has_factor(P,3).  

has_factor(N,L) :- N mod L =:= 0.
has_factor(N,L) :- 
    L * L < N, 
    L2 is L + 2, 
    has_factor(N,L2).

prime_list(A,B,L) :- 
    A1 is (A // 2) * 2 + 1, 
    p_list(A1,B,L).


p_list(A,B,[]) :- A > B, !.
p_list(A,B,[A|L]) :- 
    is_prime(A), !, 
    next(A,A1), 
    p_list(A1,B,L).

p_list(A,B,L) :- 
    next(A,A1), 
    p_list(A1,B,L).

next(2,3) :- !.
next(A,A1) :- A1 is A + 2.