forall - Prolog

时间:2010-12-12 11:27:36

标签: prolog

有人可以解释预定义谓词forall应如何在列表中找到最小值吗?

4 个答案:

答案 0 :(得分:15)

对于列表L,您可以使用:

member(Min,L), forall(member(N,L), N>=Min).

然而,虽然这是forall的一个很好的演示,但效率不高(方形复杂度而不是线性)。

答案 1 :(得分:4)

或者您可以使用谓词findall / 3

findall(Value, minimumValues(Value), minimumValuesList)

它返回一个包含元素的列表(minimumValuesList)(所有最小值,右)。

答案 2 :(得分:2)

为什么要使用forall/2查找最低要求?!

对于从列表中选择最小/最大/ ...元素的标准(线性)解决方案,请参阅SWI-Prolog的min_list/2

?- listing(min_list).
lists:min_list([], A, A).
lists:min_list([A|C], B, E) :-
        D is min(A, B),
        min_list(C, D, E).

lists:min_list([B|A], C) :-
        min_list(A, B, C).

答案 3 :(得分:0)

请使用:

minlist([X], X).
minlist([H|T], Min) :-
    minlist(T, Tmin),
    Min is min(H, Tmin), !.