このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1299305530/324
#  NAME FRUIT NUM 
#   
#  TARO banana 10 
#  TARO orange 4 
#  TARO tomato 3 
#  TARO grape 2 
#  TARO apple 1 
#  TARO melon 1 
#  TARO mango 1 
#  HANAKO tomato 30 
#  HANAKO orange 21 
#  HANAKO apple 2 
#  HANAKO banana 1 
#  GEN mango 12 
#  GEN grape 6 
#  GEN orange 4 
#  GEN banana 1 
#  GEN apple 1 
#   
#   
#  というテーブルで、各人間の持つ果物のうち上位3種類を取得したいのですが、 
#  どうすればよろしいでしょうか? 
#   
#  欲しい結果 
#  NAME FRUIT NUM 
#   
#  TARO banana 10 
#  TARO orange 4 
#  TARO tomato 3 
#  HANAKO tomato 30 
#  HANAKO orange 21 
#  HANAKO apple 2 
#  GEN mango 12 
#  GEN grape 6 
#  GEN orange 4 
#   
#   
#  SQLserver2008です。よろしくお願いいたします。 
# 
# 

テーブルで、各人間の持つ果物のうち上位3種類を取得したい :-
        findsetof(_名前,テーブル(_名前,_果物,_数量),LL1),
        append(_,[_名前|R],LL1),
        findall([_名前,_数量,_果物],(
                    テーブル(_名前,_果物,_数量)),
                LL2),
        大きい順に(LL2,LL3),
        上位3位(LL3,[_名前,_果物,_数量]),
        writef('%t %t %t\n',[_名前,_果物,_数量]),
        R = [].

大きい順に(L1,L2) :-
        sort(L1,L3),
        reverse(L3,L2),!.

上位3位(L,[_名前,_果物,_数量]) :-
        append(L0,[[_名前,_数量,_果物]|_],L),
        length(L0,Length),
        Length =< 2.