检查头部的一切是否小于尾部

时间:2013-04-20 00:57:01

标签: prolog

给定一个包含子列表的列表[[1]。[2],[3]]我如何检查列表中第一个子列表的HEAD是否小于其他子列表的其余HEADS? / p>

1 个答案:

答案 0 :(得分:2)

ISO-Prolog中的

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.