给定一个包含子列表 [[1].[2],[3]] 的列表,我将如何检查列表中第一个子列表的 HEAD 是否小于其他子列表的其余 HEADS?
问问题
65 次
1 回答
2
ISO-Prolog中术语标准顺序的比较可以递归地应用于任意复杂结构。
然后你的问题可以用类似的东西来解决
first_head_is_less([H|R]) :- maplist(@<(H), R).
测试:
?- first_head_is_less([[1],[2],[3]]).
true.
?- first_head_is_less([[10],[2],[3]]).
false.
编辑上面的代码必须细化,因为它(例如)失败了:
?- first_head_is_less([[1,2],[1,3],[3]]).
true.
这是不正确的。这里有一个更严格的测试:
first_head_is_less([H|R]) :-
maplist(head_is_less(H), R).
head_is_less([F|_], [E|_]) :- F @< E.
于 2013-04-20T03:36:38.090 回答