基本的に私の仕事は、2つのパラメータを含む述語で与えられたリストからSetを作成することです。Prologのリストからセットを作成する
最初のものがリストで、2番目がセットの値です。コード
2 ?- list2set([2,3,4,4] , X).
X = [2, 3, 4|_G2840] .
thatsの:
list2set([] , _).
list2set([ListH|ListT] , Set) :- member(ListH, Set) , list2set(ListT , Set).
本当に基本的なことのようですが
しかしどういうわけか、それは私の頭のように設定し、変数とテールが含まれているリストを与えます私が作った間違い。
あなたの定義にセットとなるものは何ですか?ユニークな要素を持つリストをほしいだけですか?伝統的な定義によって「セット」されるということは、要素の順序付けは重要ではなく、それらはすべてユニークであることを意味する。エレメントの順序付けは、セットに対してどのような操作を実行するかを検討する場合にのみ意味を持ちます。 – lurker
Setは代数データ型で、オブジェクトに与えられた関数がセットされているかどうかをO(1)で調べる関数を備えています。本質的に、キーが使用されていないハッシュマップです。リストには最悪の場合の検索時間がO(n)あり、通常、キャッシュミスを保証する不連続な割り当てによってリンクされます。セットがセットであるためには、O(1)アクセスタイムを償却しなければならない(MUST)。 – Dmitry