-2

私は SWI Prolog を使用して大学の試験のために Prolog を学んでおり、次の演習があります。

ListWithDuplicates リスト (重複を許可するリスト) から開始して ListWithoutduplicates (前のリストと同じ要素を含み、重複を含まないリスト) を作成する重複述語を記述します。

重複(ListWithDuplicates、ListWithoutduplicates)。

この引数に関連するセクションでこの演習を見つけ、setof は重複のない順序付きリストを作成するため、 setof組み込みの述語を使用して解決する必要があると思います。

問題は、私は常にsetofを使用して、事実によって表されるオブジェクトを複製せずに順序リストに入れることであり、リストの操作方法がわかりません...

私はこのようなことを試しました(しかし、それは間違っていて、私はそれを知っています):

/* FACT (BASE CASE): If the ListWithDuplicates is empty it is TRUE that the
                     ListWithoutDuplicates is empty:
*/
duplicates([], []).

duplicates(ListWithDuplicates, ListWithoutDuplicates) :-
                         setof(_, ListWithDuplicates, ListWithoutDuplicates).

私はそれを2つのケースに分けようとしました:ベースケース:空のリストから始まる重複のないリストは空の欲望であり、ListWithDuplicatesが空でない場合に関連するルールであるため、ListWithoutDiplicaresは重複を認めるリストの setof の結果...

setof を使用してこの演習を解決する方法がわかりません...可能ですか?

4

1 に答える 1

4
setof(X, member(X,List), SortedList).

しかし、これは回りくどい言い方です

sort(List, SortedList).
于 2013-04-16T11:44:54.893 に答える