このディレクトリの索引
http://pc11.2ch.net/test/read.cgi/db/1252492296/713
#   
#  A B C 
#  - - - 
#  1 3 a 
#  1 5 b 
#  2 8 c 
#  2 4 d 
#  2 6 e 
#  3 3 f 
#  3 1 g 
#   
#  上記のようなSAMPLEテーブルがあるとき、 
#  AごとにBが最大となるレコードのCを得たい、 
#  つまり、抽出結果を下記のようにしたいと考えています。 
#   
#  A C 
#  - - 
#  1 b 
#  2 c 
#  3 f 

'SAMPLE'('1','3','a').
'SAMPLE'('1','5','b').
'SAMPLE'('2','8','c').
'SAMPLE'('2','4','d').
'SAMPLE'('2','6','e').
'SAMPLE'('3','3','f').
'SAMPLE'('3','1','g').


'AごとにBが最大となるレコードのCを得る'(X,Y) :-
findsetof(A,'SAMPLE'(A,_,_),L),
member(A,L),
findmax([B,A,C],'SAMPLE'(A,B,C),[_,X,Y]).


findsetof(A,B,C) :-
findall(A,B,L),
setof(A,member(A,L),C).

findmax(A,P,X) :-
findall(A,P,L),
sort(L,L2),
last(L2,X).