1. ホーム
  2. list

[解決済み] Prolog リストから要素を削除する

2022-02-07 23:47:35

質問

リスト内のある要素の出現回数をすべて削除するために、次のようなファクトを持っています。出力は正しいのですが、要素が空白に置き換えられているだけです。

remover( _, [], []).
remover( R, [R|T], [T2]) :- remover( R, T, T2).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).

removerを呼び出すと、出力は:

remover(3,[1,2,3,4,3],Res)
Res = [1, 2, [4, []]]

私はまた、最初の出現だけを削除するために、以下のファクトを持っていますが、出力は上記と同じです。

remover_primeira( _, [], []).
remover_primeira( R, [R|T], [T2]) :-remover_primeira( R, T, T2),!.
remover_primeira( R, [H|T], [H|T2]) :- H \= R, remover_primeira( R, T, T2).


何が間違っているのでしょうか?

どうすればいいですか?

をラップしてはいけません。 T2 を第2節のシングルトンリストに含めると、そうなるはずです。

remover( _, [], []).
remover( R, [R|T], T2) :- remover( R, T, T2).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).

を削除するだけでよい場合 最初 が発生した場合、その要素を見つけた時点から再帰するべきではありません。

remover( _, [], []).
remover( R, [R|T], T).
remover( R, [H|T], [H|T2]) :- H \= R, remover( R, T, T2).