1

使用内置的置换 Prolog 函数在 Prolog 中编写排序函数 sort(A,B)。如果 B 是 A 的排序版本,则排序函数成立。

% 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 回答