我在Prolog中是全新的,我在处理包含其他列表的列表时遇到问题。
我有一些像这样的列表:
[([5],23),([1],23),([2],43),([4],29),([3],14),([5,1,4,3],47)]
我试图获取最长的(子)列表并将其放在列表中
在这个例子中我希望结果如下:
([5,1,4,3],47),([5],23),([1],23),([2],43),([4],29),([3],14)]
(不要关心它是否会从它的起点移除)。
感谢所有愿意帮助的人
答案 0 :(得分:1)
假设您要使用内置排序例程(我在这里使用SWI-Prolog作为示例),那么以下内容将起作用:
calcLen((List,K),(N,List,K)):- length(List,N).
delLen((_,List,K),(List,K)).
sortlen(List,Sorted):-
maplist(calcLen,List,List1),
sort(0,@>=,List1, List2),
maplist(delLen,List2,Sorted).
两个谓词calcLen
和delLen
在列表中的对的前面插入并删除长度计算 - 使它们成为三元组。 maplist
谓词将calcLen
(以及后来的delLen
)应用于列表。