リストのリストから要素のフォームを削除しようとしています。これは私がやろうとしているものの例である:Prologリストのリストから削除する方法
List=[[1,2],[1,3],[4,2]]
Max=2
delete(List,[_|Max],List2)
List2=[[1,3]]
は説明:そうList
与えられた私は、そのサブリスト内の第二の要素としてMax
を持つすべての要素を削除するには、削除/ 3を使用しようとしています。私はこれが標準のdelete/3述語で可能かどうかはわかりません。助けてくれてありがとう!
これは私自身の述語でこれまでに試したことです。私はこれが機能していないことを理解し、私が望むことをしません。
second_element(E, []).
second_element(E,L):-
member(X,L),
X==[_,E],
delete(L,X,L2),
second_element(E,L2).
これは簡単な演習であり、 'delete'述部を必要としません。 'delete/3'のドキュメントを読んだら、それはどのように動作するのでしょうか? 'second_element(E、[_、E | _]) 'というヒントがあります。 'second_element(X、L)'は 'X'が' L'の2番目の要素である場合にのみ成功します。残りはPrologにおける共通の再帰的なリスト走査である。いくつかの仕事を見せて、さらに具体的な質問をしてみてください。 – lurker
コメントをいただきありがとうございます。最初の述語の仕組みを詳しく説明できますか?それはリストのリストのために働くようには思われません。 –
'simple_element(E、[_、E | _])。 'は、第2引数が第2引数が第1引数と同じリストであると単純に言います。 Prologの仕組みです。それは*関係*を定義します。それがうまくいくのは、Prologが単一の述語句に複数回 'E 'を見ているときに、それらを統一します(論理的には同じ値を表すと仮定します)。ややシンプルな述語は 'head_of_list(Head、List)'であり、単に 'head_of_list(H、[H | _])'と書くことができます。 – lurker