このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1197620454/637
#  人生の初心者です。宿題じゃないんだけれど、ここで質問いいですか? 
#  { 1, 2, 2, 3, 10, 11, 100, 101, 102, 103 } 
#  っていう配列があります。 
#  ここから重複を無視して、連続数の個数をカウントするにはどう書く? 
#  1を先頭に3個 
#  10を先頭に2個 
#  100を先頭に4個 
#  ということをしたいです。 
#   
#  ttp://ideone.com/MQ4qy 
#  と、無い知恵絞って書いてみたけれど 
#  実はそのものズバリなメソッドがあってで一発でしたとか 
#  無駄に無駄なことしてますでしょうか?添削してください。 
#  配列作っても余分が、無駄だなぁとか 
#  自分では気にいってないのですが、じゃぁどうする? 
#  ってのが解りません。どなたかご教示お願いします。 
#  C#ならなんでも。リンク使ってもラムザ式使ってくださっても結構です。 
# 
# 

重複を無視して、連続数の個数をカウントする([],[]) :- !.
重複を無視して、連続数の個数をカウントする([N|R1],[[N|Count]|R2]) :-
        重複を無視して、連続数の個数をカウントする([N1|R1],R3,0,Count),
        \+(Count=0),
        重複を無視して、連続数の個数をカウントする(R3,R2),!.
重複を無視して、連続数の個数をカウントする([N|R1],R2) :-
        重複を無視して、連続数の個数をカウントする(R1,R2),!.

重複を無視して、連続数の個数をカウントする([N1|R1],R,Count1,Count) :-
        append(L0,[N2|R2],[N1|R1]),
        \+(N1=N2),
        all(L0,N1),
        N2 is N1 + 1,
        Count2 is Count1 + 1,
        重複を無視して、連続数の個数をカウントする([N2|R2],R,Count2,Count),!.
重複を無視して、連続数の個数をカウントする(R,R,Count,Count) :- !.