このディレクトリの索引
#  出題: http://toro.2ch.net/test/read.cgi/tech/1387257592/395
#  ●Regular Expressionの使用環境
#  JavaScript
#  
#  ●検索か置換か?
#  置換
#  
#  ●説明
#  同じ文字の4回以上の繰り返しを3回にしたい
#  
#  ●対象データ
#  ああああああああああああああああああいいいいいいいいいいいいいいいうえおおおおおおおおおおおおおお
#  
#  ●希望する結果
#  あああいいいうえおおお

同じ文字の4回以上の繰り返しを3回にしたい(_文字列,_置換した文字列) :-
        atom_chars(_文字列,Chars_1),
        ならびの同じ文字要素の4回以上の繰り返しを3回にしたい(Chars_1,Chars_2),
        atom_chars(_置換した文字列,Chars_2).


ならびの同じ文字要素の4回以上の繰り返しを3回にしたい([],[]).
ならびの同じ文字要素の4回以上の繰り返しを3回にしたい(L1,L2) :-
        ならびの同じ文字要素の4回以上の繰り返しを(L1,_同じ要素,R1_1),
        '3回にしたい'(R1_1,_同じ要素,R1_2,L2,R2),
        ならびの同じ文字要素の4回以上の繰り返しを3回にしたい(R1_2,R2),!.
ならびの同じ文字要素の4回以上の繰り返しを3回にしたい([A|R1],[A|R2]) :-
        ならびの同じ文字要素の4回以上の繰り返しを3回にしたい(R1,R2),!.

ならびの同じ文字要素の4回以上の繰り返しを([A,A,A,A|R],A,R).

'3回にしたい'(R1_1,_同じ要素,R1_2,L2,R2) :-
        ならびの先頭からの指定要素を読み飛ばす(R1_1,_同じ要素,R1_2),
        L2 = [_同じ要素,_同じ要素,_同じ要素|R2].

ならびの先頭からの指定要素を読み飛ばす([],_,[]) :- !.
ならびの先頭からの指定要素を読み飛ばす([A|R],B,[A|R]) :-
        \+(A = B),!.
ならびの先頭からの指定要素を読み飛ばす([A|R1],A,R2) :-
        ならびの先頭からの指定要素を読み飛ばす(R1,A,R2).