このディレクトリの索引
#  出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/599
#  こういうSQLがあって、 
#  select groups.name as "group", members.name as "member" 
#  from groups 
#  join members on groups.id = members.group_id 
#  order by groups.id, members.id; 
#   
#  実行結果はこうなっています。 
#           group      |      member 
#  --------------------+----------------- 
#   麦わら             | ルフィ 
#   麦わら             | ナミ 
#   麦わら             | チョッパー 
#   木ノ葉隠れの里     | ナルト 
#   木ノ葉隠れの里     | カカシ 
#   
#  ここで、memberに対してグループごとの連番をつけるにはどうしたらいいですか。 
#  希望する出力結果はつぎのとおり 
#   
#           group      | num |    member 
#  --------------------+-----+-------------- 
#   麦わら             | 1   |   ルフィ 
#   麦わら             | 2   |   ナミ 
#   麦わら             | 3   |   チョッパー 
#   木ノ葉隠れの里     | 1   |   ナルト 
#   木ノ葉隠れの里     | 2   |   カカシ 
#   
#  なおPostgres 9.2です。よろしくお願いします。 
# 
# 

'memberに対してグループごとの連番をつけるにはどうしたらいいですか。'(_group,_連番,_member) :-
        'memberに対してグループごとの'(LL1),
        連番を付ける(1,LL1,LL2),
        member([_group,_連番,_member],LL2).

'memberに対してグループごとの'(LL1) :-
        findall([_group,_member],(
                    'member.group'(_group,_member),
                    members(_member)),
                LL1).

連番を付ける(_,[],[]).
連番を付ける(N,[[A,B],[A,C]|R1],[[A,N,B]|R2]) :-
        N_2 is N + 1,
        連番を付ける(N_2,[[A,C]|R1],R2),!.
連番を付ける(N,[[A,B]|R1],[[A,N,B]|R2]) :-
        N_2 is N + 1,
        連番を付ける(1,R1,R2).