【发布时间】:2014-05-03 23:04:38
【问题描述】:
我正在尝试创建一个返回数素数直到 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 是否为素数,如果是,则将 N 添加到列表中,如果不忽略并测试 N-1。代码如下:
primeList(N,C):- is_prime(N) -> append(N,[C],L),fail; N1 is N-1, primeList(N1,L).
而且它不起作用!我怎样才能按照我的逻辑解决这个问题? 非常感谢。
【问题讨论】: