1

組み込みの順列 Prolog 関数を使用して、並べ替え関数 sort(A,B) を Prolog に記述します。B が A のソートされたバージョンである場合、sort 関数は成立します。

% sorted holds if list is sorted
sorted([]).
sorted([A]).
sorted([A,B|T]) :- A=<B, sorted([B|T]).

% sort list holds if A is sorted list of B
sort(A,B) :- permutation(A,B), sorted(B).

問題は、L に重複する値がある場合、R にはこれらの重複が含まれないことです。

出力:

?- sort([1,4,2,5,4,4,2], X).
X = [1, 2, 4, 5].

重複を落とさないようにソート機能を変更するにはどうすればよいですか?

4

1 に答える 1

1

順列ソートは重複を削除しません: コードのテスト

?- sort_([1,4,2,5,4,4,2], X).
X = [1, 2, 2, 4, 4, 4, 5] .

(組み込みの名前の衝突を避けるために、名前を sort_ に変更しました)。

ただし、sort/2は重複を削除します。msort/2を使用できます

?- msort([1,4,2,5,4,4,2], X).
X = [1, 2, 2, 4, 4, 4, 5].
于 2013-06-11T06:37:54.533 に答える