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).
它不起作用!我怎麼能解決這個問題,遵循我的邏輯? 非常感謝。