基本的に最初のN
の数字をリストから削除したい場合は、数字が素数であるかどうかをチェックする関数がうまくいくように見えますが、プログラム自体はリストから最初のN個の素数を削除する(プロローグ)
[2,4,5,7,6,9,11]
と
N = 3
ため例えば
私は[4, 6, 9, 11]
を取得する必要がありますが、私は唯一の[4, 6, 9]
を取得します。
divisible(X,Y) :-
0 is X mod Y, !.
divisible(X,Y) :-
X > Y+1,
divisible(X, Y+1).
%isPrime function check whether or not the argument is a prime number
isPrime(2) :- true,!.
isPrime(X) :- X < 2,!,false.
isPrime(X) :- not(divisible(X, 2)).
%delFunction (input_list, N, output_list)
delFunction([],_,_).
delFunction(_,0,_).
delFunction([H|T], N, [H|Res]):-
not(isPrime(H)), !,
delFunction(T, N, Res).
delFunction([_|T], N, Res):-
N1 is N-1,
delFunction(T,N1,Res).
delFunction([2,4,5,7,6,9,11],3,X)
- (正解ではありません)>[4,6,9]
私が間違っていたところ
は正直なところ、私は知りませんが、実装のアイデアはかなり簡単ようで、まっすぐ進むので、コードです。
また、私はそれを実行すると[4]
で停止し、実行の最後(結果)に私を得るために私は次をクリックし続ける必要があります。どのようにそれを修正するための任意のアイデア?多分私はいくつかのカットが必要かもしれないが、どこが分からないかもしれないと思っている。
PS:私はむしろ使用しないと思います組み込み関数
さて、これらは私の問題です。最終的な出力が正しくなく、私に複数の答えが与えられます(明らかに1つしかない場合)。それはまだそれの悪用だと思う!どこかで... – Hansewl