0

我想在序言中按字母顺序排列一个列表,这样我就可以去掉该列表的头部或尾部来处理——基本上可以更容易地按字母顺序(或反字母顺序)处理事情。我每次都以不同的顺序收到单词(不是按字母顺序排列的,也不是按相同的顺序);例如,

'ra1' 'ra2' 'rb2' 'ra3' 'rb1'

我无法对列表进行硬编码;它可能是 9 或 16 个项目,等等,所以我想将它们排序成一个按字母顺序排列的 'ra1'、'ra2'、'ra3'、'rb1'、'rb2' 列表......

我应该能够使用“比较”。例如,

compare(Res, 'ra2', 'ra1').
Res = (>).

这恰好是 2 件物品,现在我需要一些未指定数量的物品。想法?

places(['zzz', 'aaa']).

alph(Outlist, Inlist) :- 
    member(A, Inlist),
    member(B, Inlist),
    compare(<, A, B),
    A \= B,
    % and they go in that order in a new list.
    append([A], [B], Outlist).
4

1 回答 1

0

使用标准sort/2谓词很容易:

?- sort(['ra1', 'ra2', 'rb2', 'ra3', 'rb1'], Sorted).
Sorted = [ra1, ra2, ra3, rb1, rb2].

如果您的列表可以有重复项,请更改sortmsort,因为sort/2消除了重复项。

于 2014-09-19T23:55:24.100 回答