【问题标题】:Prolog: Checking lengths of lists inside a listProlog:检查列表中列表的长度
【发布时间】:2016-12-06 11:40:29
【问题描述】:

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

(不管它是否会从它的起始位置移除)。

感谢所有愿意提供帮助的人

【问题讨论】:

    标签: list prolog


    【解决方案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).
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2015-05-01
      • 1970-01-01
      • 2017-03-23
      相关资源
      最近更新 更多