List 在Prolog中返回素数列表

List 在Prolog中返回素数列表,list,prolog,logic,primes,List,Prolog,Logic,Primes,我正在尝试创建一个列表,该列表返回N个数之前的素数 我有一个代码,指示一个数是否为素数: 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). 但它不

我正在尝试创建一个列表,该列表返回N个数之前的素数

我有一个代码,指示一个数是否为素数:

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). 
但它不起作用!我如何按照我的逻辑解决这个问题?
非常感谢。

一旦Prolog中的变量在谓词子句中实例化(具有值),就不能重新赋值。因此,您不能一直在
primeList
中添加到列表
L

但是您可以使用
findall
之间的

prime_list(N, C) :-
    findall(X, (between(2,N,X), is_prime(X)), C).

一旦Prolog中的变量在谓词子句中实例化(具有值),就不能重新分配它。因此,您不能一直在
primeList
中添加到列表
L

但是您可以使用
findall
之间的

prime_list(N, C) :-
    findall(X, (between(2,N,X), is_prime(X)), C).

一旦Prolog中的变量在谓词子句中实例化(具有值),就不能重新分配它。因此,您不能一直在
primeList
中添加到列表
L

但是您可以使用
findall
之间的

prime_list(N, C) :-
    findall(X, (between(2,N,X), is_prime(X)), C).

一旦Prolog中的变量在谓词子句中实例化(具有值),就不能重新分配它。因此,您不能一直在
primeList
中添加到列表
L

但是您可以使用
findall
之间的

prime_list(N, C) :-
    findall(X, (between(2,N,X), is_prime(X)), C).