Prolog:检查列表中列表的长度

3
我完全不懂Prolog,但是我可以帮您处理一个包含其他列表的列表。以下是需要翻译的内容:

我在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)]

(无论它是否被从起始位置移除都无所谓。)

感谢所有愿意帮助的人

1个回答

2

假设你想使用内置的排序例程(这里以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).

两个谓词calcLendelLen在列表的前面插入和删除长度计算,使它们变成三元组。 maplist谓词将calcLen(以及后来的delLen)应用于列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接