使用排列的Prolog排序列表

时间:2013-06-11 04:23:14

标签: sorting prolog permutation

使用内置的置换Prolog函数编写排序函数,在Prolog中排序(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].

如何更改排序功能以使其不会丢失重复项?

1 个答案:

答案 0 :(得分: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].