我需要写一个谓词longestList / 2,如果L2是最长的,则满足longestList(L1,L2)
列表L1的列表中的嵌套列表。

?- longestList([[1],[1,2],[1,2,3],[1,2,3,4]],LI).
LI = [[1, 2, 3, 4]] ;
No
?- longestList([[a,b,c],[d,e],[f,g,h]],LI).
LI = [[f, g, h],[a,b,c]];
No


有人能帮助我凭直觉去解决它吗?

最佳答案

member / 2将允许您从列表中窥视元素(针对您的案例的列表):因此,如果您有member_length / 3谓词,则可以编写代码

longestList(Lists, Longest) :-
  member_length(Lists, Longest, N),
  \+ ( member_length(Lists, _Another, M), M > N ).


然后找到所有最长的,可以使用findall / 3 ...

关于prolog - 在Prolog中找到最长的 list ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33739801/

10-12 22:13