このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/db/1299305530/441
#  id 
#  1 
#  2 
#  3 
#  5 
#  9 
#  10 
#  ... 
#   
#  のようなテーブルがあって、id を "1-3,5,9-10" のように取り出すことはできますか? 
#  GROUP_CONCAT で1つずつカンマで連結するこはできるのですが。 
# 

'id が1\\n3\\n5\\n9\\n10\\n ... のテーブルがあって、id を "1-3,5,9-10" のように取り出す'(L) :-
        findall(X,(
                    '連続するidを纏めて文字列とする'(X)),
                L).

'連続するidを纏めて文字列とする'(X) :-
        findall(_id,(
                  テーブル(_id)),
                L),
        append(L1,L2,L3,L),
        連続(L2),
        二つのならびが不連続(L1,L2),
        二つのならびが不連続(L2,L3),
        ならびの先頭と最後の要素を取り出す(L2,X).

ならびの先頭と最後の要素を取り出す([S],S).
ならびの先頭と最後の要素を取り出す(L,S-E) :-
        last(L,E),
        L = [S|_],!.

連続([A]).
連続([A,B|R]) :-
        B is A + 1,
        連続([B|R]).

二つのならびが不連続(L1,L2) :-
        last(L1,A),
        L2 = [B|_],
        B is A + 1,!,
        fail.
二つのならびが不連続(L1,L2).