我想在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).
答案 0 :(得分:0)
使用标准sort/2
谓词很简单:
?- sort(['ra1', 'ra2', 'rb2', 'ra3', 'rb1'], Sorted).
Sorted = [ra1, ra2, ra3, rb1, rb2].
如果您的列表可能有重复项,请将sort
更改为msort
,因为sort/2
会消除重复项。