给定一个包含子列表的列表[[1]。[2],[3]]我如何检查列表中第一个子列表的HEAD是否小于其他子列表的其余HEADS? / p>
答案 0 :(得分:2)
Comparison of Standard Order of Terms可以递归地应用于任意复杂结构。
然后你的问题就可以通过像
这样的东西来解决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.