0
我试图创建一个列表,它返回数字素数直到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).
工作得非常好。
我的逻辑是:测试N是否为素数,如果是这样,则在列表中添加N,如果不只是忽略并测试到N-1。这里代码:
primeList(N,C):- is_prime(N) -> append(N,[C],L),fail; N1 is N-1, primeList(N1,L).
它不起作用!我怎么能解决这个问题,遵循我的逻辑? 非常感谢。