2013-12-16 3 views
1

다음과 같은 목록이 있습니다. [[_,A,D,_,_],...]. 최대 A의 대상이 D과 일부 값이 같음을 확인하고 싶습니다. 다음 코드를 작성했지만 작동하지 않습니다. 누구든지 도와 줄 수 있습니까? 라이브러리 집합을 사용하여최대 조건의 대상 목록

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.