2013-12-16 45 views
1

我有一个列表如下[[_,A,D,_,_],...]。我想找到D等于某个值的最大A。我写了下面的代码,但它不起作用。谁能帮忙?列表中最大限制条件

maxL([[_,Max,C,_,_]],C,Max). 
maxL([[_,A,D,_,_]|F],C,Max):- 
    D==C, maxL(F,C,B), Max is max(A,B). 
maxL([[_,_,D,_,_]|F],C,Max):- 
    D>C, maxL(F,C,B), B is Max. 
maxL([[_,_,D,_,_]|F],C,Max):- 
    D<C, maxL(F,C,B), B is Max. 

回答

0

利用图书馆总,很容易

maxL(L, C, Max) :- aggregate_all(max(A), member([_,A,C,_,_], L), Max). 

测试:

1 ?- maxL([[_,1,y,_,_],[_,2,y,_,_],[_,3,n,_,_]], y, M). 
M = 2.