このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354393458/700
#  お題:重複した文字のうち最初に現れた文字だけ削除する。 
#  例 
#  "Hello, world" -> "Hel, world" 

重複した文字のうち最初に現れた文字だけ削除する(_文字列,_重複した文字のうち最初に現れた文字だけ削除された文字列) :- 
        重複した文字のうち最初に現れた文字だけ削除する(_文字列,[],_重複した文字のうち最初に現れた文字だけ削除された文字列).

重複した文字のうち最初に現れた文字だけ削除する(_文字列,_既に削除対象となった文字列ならび,_重複した文字のうち最初に現れた文字だけ削除された文字列) :- 
        '重複した文字のうち最初に現れた文字の前方文字列・後方文字列'(_文字列,_削除対象文字列,_既に削除対象となった文字列ならび,_前方文字列,_後方文字列),
        重複した文字のうち最初に現れた文字だけ削除する(_後方文字列,[_削除対象文字列|_既に削除対象となった文字列ならび],_重複した文字のうち最初に現れた文字だけ削除された後方文字列),
        atomic_list_concat([_前方文字列,_重複した文字のうち最初に現れた文字だけ削除された後方文字列],_重複した文字のうち最初に現れた文字だけ削除された文字列),!.
重複した文字のうち最初に現れた文字だけ削除する(_文字列,_,_文字列).

'重複した文字のうち最初に現れた文字の前方文字列・後方文字列'(_文字列,_削除対象文字列,_既に削除対象となった文字列ならび,_前方文字列,_後方文字列) :-
        '文字列を検索し前方文字列・後方文字列を得る'(_文字列,_前方文字列,_削除対象文字列,_後方文字列), 
        \+(member(_削除対象文字列,_既に削除対象となった文字列ならび)),
        sub_atom(_後方文字列,_,_,_,_削除対象文字列),!.

'文字列を検索し前方文字列・後方文字列を得る'(_文字列,_前方文字列,_対象文字列,_後方文字列) :-
        sub_atom(_文字列,_開始位置,_,_残り長さ,_対象文字列),
        sub_atom(_文字列,0,_開始位置,_,_前方文字列),
        sub_atom(_文字列,_,_残り長さ,0,_後方文字列).

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

p_1(_1,_2) :-
    p_2(_1,[],_2).

p_2(_1,_2,_3) :-
    p_3(_1,_4,_2,_5,_6),
    p_2(_6,[_4|_2],_7),
    atomic_list_concat([_4,_7],_3),!.
p_2(_1,_,_1).

p_3(_1,_2,_3,_4,_5) :-
    p_4(_1,_4,_2,_5),
    \+(member(_2,_3)),
    sub_atom(_5,_,_,_,_2),!.

p_4(_1,_2,_3,_4) :-
    sub_atom(_1,_5,_,_6,_3),
    sub_atom(_1,0,_5,_,_2),
    sub_atom(_1,_,_,0,_4).