2010-12-12 84 views

回答

12

有關列表L,你可以使用:

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

然而,儘管這是forall一個很好的示範,它是沒有效率(平方複雜性,而不是線性)。

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

,或者您可以使用謂詞的findall/3

findall(Value, minimumValues(Value), minimumValuesList) 

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