有人可以解释预定义谓词forall
应如何在列表中找到最小值吗?
答案 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), !.