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