如何在Prolog中按字母顺序排列列表?

时间:2014-09-19 14:41:00

标签: prolog alphabetized

我想在prolog中按字母顺序排列列表,这样我就可以删除该列表的头部或尾部来处理 - 基本上可以更容易地按字母顺序(或反向字母顺序)处理事物。我每次都收到不同顺序的单词(尚未按字母顺序排列,也不按相同顺序);例如,

' RA1' ' RA2' ' RB2' ' RA3' ' RB1'

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

我应该可以使用'比较'。例如,

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

这是正好两个项目,现在我需要一些未指定数量的项目。想法?

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).

1 个答案:

答案 0 :(得分:0)

使用标准sort/2谓词很简单:

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

如果您的列表可能有重复项,请将sort更改为msort,因为sort/2会消除重复项。