関数を作成しようとしています-noPrime(X,Result)
これは、 range 内のすべての非プライマリ番号のリストを提供します[X-1,2]
。
例えば -
noPrime(9,Result).
Result = [8,6,4]
これまでのところ、次のことを試しました-
nprimes(4,[]) :- !.
nprimes(X,[H|Rest]) :- H is X-1,nprimes(H,NewRest),
( isPrime(H) -> Rest = NewRest; Rest = [H|NewRest]).
しかし、それは -
Result = [8, 8, 7, 6, 6, 5, 4, 4].
非プライマリを複製し、一度プライマリを与えるようです。
isPrime - うまく機能する私自身の関数です。
ここで何が間違っているのか、それを修正する方法を見つけることができますか?