ですから、次のクエリが成功する必要があること、言うが、
?- erase([1,2,3,1,6,1,7],1,NL).
false.
を失敗しても、次の一般化が失敗した:
?- erase([1,2,3,1,6,1,7],E,NL).
false.
私はより容易なアクセスのためにこれを再定式てみましょう:
?- L = [1,2,3,1,6,1,7], erase(L,E,NL).
false.
そこで、このリストをさらに一般化する必要があります。この要素を要素で試してみることもできますが、まずは最初に優先します。
?- L = [_,_,_,_,_,_,_], erase(L,E,NL).
L = [_2528, E, _2540, E, _2552, E, _2564],
NL = [_2528, E, _2540, _2552, _2564] ;
false.
これは唯一の回答です。 E
は第2位、第3位、第5位に正確に現れなければならないことがわかります。それが本当であれば試してみましょう:
?- erase([0,1,0,1,0,1,0],1,NL).
NL = [0, 1, 0, 0, 0] ;
false.
だからあなたのソリューションは、—時々に動作します。あなたがかなり欲しいようだ:複数のリストを処理するときに
erase(L, X, NL) :-
phrase(
(seq(Any1), [X], seq(Any2), [X], seq(Any3), [X], seq(Any4)), L),
phrase(
(seq(Any1), seq(Any2), seq(Any3), [X], seq(Any4)), NL).
seq([]) --> [].
seq([E|Es]) --> [E], seq(Es).
何それが4回発生した場合?私たちは '1'だけを探しますか?または、複数回発生するすべての*要素を削除しますか? –
私はPに書いたように、このケースは存在しないと仮定します。 – kindaExcited
私は*アヒルのデバッグ*で始まります:あなたの述語が目的としているものをあなたのラバーダックまたは私たちに伝えます。なぜあなたは 'append/3'をここで使うのですか?なぜこれがこの問題の良いツールだと思いますか? –