このディレクトリの索引

# 出典::スレ立てるまでもない質問はここで 117匹目 #333 # # Prologに於ける文字置換のパターンを示す # # 置換対象文字列に出会う度に非決定性で置換される事を基本として # 併せて、置換回数が最大になるような置換述語を定義する # # 文字列を検索して、適合パターンを置換していく # 1) 文字列の先頭から検索パターンに適合する文字列の前の文字列 # 2) 検索パターンに適合した文字列 # 3) 検索パターンに適合した文字列より後の文字列 # # 2) 検索パターンに適合した文字列を置換文字列に置き換える # 置換文字列定義(def,'DEF'). '置換回数が最大になるような文字列置換'(_文字列,_置換された文字列) :- 全ての置換回数を計測した置換された文字列ならび(_文字列,LL), 置換回数が最大になるような置換された文字列(LL,_置換された文字列). 全ての置換回数を計測した置換された文字列ならび(_文字列,LL) :- findall([_置換された回数,_置換された文字列],( '置換パターン'(_文字列,_置換された回数,_置換された文字列)),LL). 置換回数が最大になるような置換された文字列(LL,_置換された文字列) :- 置換回数が最大に(LL,_最大数), なるように置換された文字列(LL,_最大数,_置換された文字列). 置換回数が最大に(LL,_最大数) :- findmax(N,member([N,_],LL),_最大数). なるように置換された文字列(LL,_最大数,_置換された文字列) :- member([_最大数,_置換された文字列],LL). '置換パターン'(_文字列,_置換された回数,_置換された文字列) :- '置換回数付き置換パターン'(_文字列,0,_置換された回数,_置換された文字列). '置換回数付き置換パターン'(_文字列,_置換された回数_1,_置換された回数,_置換された文字列) :- 置換対象文字列を得る(_文字列,_前文字列_1,_適合文字列_1,_後文字列_1), succ(_置換された回数_1,_置換された回数_2), '置換回数付き置換パターン'(_文字列,_前文字列_1,_置換する文字列,_後文字列_1,_置換された回数_2,_置換された回数,_置換された文字列). 置換対象文字列を得る(_文字列,_前文字列_1,_適合文字列_1,_後文字列_1) :- sub_atom(_文字列,_前文字列_1,_適合文字列_1,_後文字列_1), 置換文字列定義(_適合文字列_1,_置換する文字列). '置換回数付き置換パターン'(_文字列,_前文字列_1,_置換する文字列,_後文字列_1,_置換された回数,_置換された回数,_置換された文字列) :- atomic_list_concat([_前文字列_1,_置換する文字列,_後文字列_1],_置換された文字列). '置換回数付き置換パターン'(_文字列,_前文字列_1,_置換する文字列,_後文字列_1,_置換された回数_1,_置換された回数,_置換された文字列) :- '置換回数付き置換パターン'(_後文字列_1,_置換された回数_1,_置換された回数,_置換された文字列_2), atomic_list_concat([_前文字列_1,_置換する文字列,_置換された文字列_2],_置換された文字列). findmax(_射影項,_目標,_最大数) :- findall(_射影項,_目標,_解ならび), 最大値を取り出す(_解ならび,_最大数). 最大値を取り出す(_解ならび,_最大数) :- sort(_解ならび,_整列した解ならび), last(_整列した解ならび,_最大数).