このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1323566370/896
#  すみません 
#  Objective-CのNSRegularExpressionで、ある文字列について、 
#  ・順番通りに 
#  ・一部が欠けてもよく 
#  ・途中に余計な文字が入ってもよく 
#  ・一致する数を数える 
#  ようなパターンを組みたいのですが、 
#  例えばABCDEという文字列があったとして 
#  ABCDE→5(全件一致) 
#  AABBCCDDEE→5(全件一致) 
#  ADCBE→3(A,C,Eが一致) 
#  AFGHBCDE→5(全件一致) 
#  EDCBA→1(Eのみ一致) 
#  というように数えたいのですが、上手くいきません。 
#  .*?(A)?.*?(B)?.*?(C)?.*?(D)?.*?(E)?.*? 
#  ではダメみたいなのですがどうするのが正しいでしょうか 
# 
# 

'・順番通りに ・一部が欠けてもよく ・途中に余計な文字が入ってもよく ・一致する数を数えるようなパターンを評価する'(_文字列,_パターン,_評価) :-
        atom_chars(_文字列,Chars),
        指定検索パターンの昇順要素のみ評価する('A',Chars,['A','B','C','D','E'],_重複可能なパターン),
        パターン評価(_重複可能なパターン,_パターン,_評価).

指定検索パターンの昇順要素のみ評価する(_,[],[]).
指定検索パターンの昇順要素のみ評価する(U,[A|R1],_検索文字ならび,[A|R2]) :-
        member(A,_検索文字ならび),
        U @=< A,
        指定検索パターンの昇順要素のみ評価する(A,R1,_検索文字ならび,R2).
指定検索パターンの昇順要素のみ評価する(U,[A|R1],_検索文字ならび,R2) :-
        member(A,_検索文字ならび)),
        U @> A,
        指定検索パターンの昇順要素のみ評価する(U,R1,_検索文字ならび,R2).
指定検索パターンの昇順要素のみ評価する(U,[A|R1],_検索文字ならび,R2) :-
        \+(member(A,_検索文字ならび)),
        指定検索パターンの昇順要素のみ評価する(U,R1,_検索文字ならび,R2).

パターン評価(_重複可能なパターン,_検索文字ならび,_パターン,_評価) :-
        重複する文字を取り除く(_重複可能なパターン,_パターン),
        length(_パターン,_パターンの文字数),
        length(_検索文字ならび,_全件数),
        評価(_パターンの文字数,_全件数,_評価).

重複する文字を取り除く(_重複可能なパターン,_パターン) :-
        setof(A,member(A,_重複可能なパターン),_パターン).

評価(_全件数,_全件数,全件一致).
評価(_パターンの文字数,_,_評価) :-
        atomic_list_concat([_パターンの文字数,件一致],_評価).