0

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

4

1 回答 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 回答