このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1299305530/666
#  id id2 hoge 
#  1 1 a 
#  2 1 b 
#  3 1 c 
#  4 1 d 
#  5 2 a 
#  6 2 b 
#   
#  こんなテーブルにselect * from test group by id2とやると 
#  4 1 d 
#  6 2 b 
#   
#  が出ますが最初に登録した 
#  1 1 a 
#  5 2 b 
#   
#  と出したいのですがどうしたらいいでしょうか? 
# 
# 

test(1,1,a).
test(2,1,b).
test(3,1,c).
test(4,1,d).
test(5,2,a).
test(6,2,b).


'testテーブル上の、id2をキーにグループ参照をしてキー値を持つ最初の組のみを取り出す'(_id1,_id2,_hoge) :-
id2をキーにグループ参照をして(test,_キーならび),
キー値を持つ最初の組のみを取り出す(test,_キーならび,_id1,_id2,_hoge).

id2をキーにグループ参照をして(_述語名,_キーならび) :-
P =.. [_述語名,_id1,_id2,_hoge],
setof(_id2,[_id1,_id2,_hoge] ^ P,_キーならび).

キー値を持つ最初の組のみを取り出す(_述語名,[_キー|R],_id1,_id2,_hoge) :-
最初の組のみを取り出す(_述語名,_キー,_id1,_id2,_hoge).
キー値を持つ最初の組のみを取り出す(_述語名,[_|R],_id1,_id2,_hoge) :-
キー値を持つ最初の組のみを取り出す(_述語名,R,_id1,_id2,_hoge).

最初の組のみを取り出す(_述語名,_id2,_id1,_id2,_hoge) :-
P =.. [_述語名,_id1,_id2,_hoge],
once(P).