このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1268979408/731
#  すみません、後ひとつ聞きたいんですが 
#   
#  2桁以上の整数を、すべて+1する置き換えかたはありますか? 
#  5 
#  50 
#  100 
#  134 
#  1295 
#  ↓ 
#  5 
#  51 
#  101 
#  135 
#  1296 
#  って感じです 
#  よろしくお願いします。 
# 
# 

f(X,Y) :- X > 10,Y is X + 1,!.
f(X,X).

'2桁以上の整数を、すべて+1する置き換え'(_文字列,_置き換えられた文字列) :-
        文字列の中の数値列を選別して関数を適用する(_文字列,_置き換えられた文字列).

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

文字列の中の数値列を選別して関数を適用する(_文字列,_適用後の文字列) :-
        sPLIT(_文字列,['0','1','2','3','4','5','6','7','8','9'],L1),
        一文字の数字または数字ならびを数値にまとめる(L1,L2),
        数値要素のみに関数を適用(L2,L3),
        concat_atom(L3,_適用後の文字列).

一文字の数字または数字ならびを数値にまとめる([],[]) :- !.
一文字の数字または数字ならびを数値にまとめる(L1,[_数値|R2]) :-
        数字以外に出会うまで(L1,_数値,R),
        一文字の数字または数字ならびを数値にまとめる(R1,R2),!.
一文字の数字または数字ならびを数値にまとめる([A|R1],[A|R2]) :-
        一文字の数字または数字ならびを数値にまとめる(R1,R2).

数字以外に出会うまで(L1,_数値,R) :-
        append(L0,[A|_],L1),
        \+(append(_,[A|_],['0','1','2','3','4','5','6','7','8','9'])),
        concat_atom(L0,_数値アトム),
        atom_to_term(_数値アトム,_数値,_),!.
数字以外に出会うまで(L1,L1,[]).

数値要素のみに関数を適用([],[]) :- !.
数値要素のみに関数を適用([A|R1],[B|R2]) :-
        number(A),
        f(A,B),
        数値要素のみに関数を適用(R1,R2),!.
数値要素のみに関数を適用([A|R1],[A|R2]) :-
        \+(number(A)),
        数値要素のみに関数を適用(R1,R2).

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

numbers(['0','1','2','3','4','5','6','7','8','9']).

'2桁以上の整数を、すべて+1する置き換え'(_文字列,_置き換えられた文字列) :-
        numbers(Numbers),
        'sPLIT'(_文字列,Numbers,L1),
        '2桁以上の整数を、すべて+1する置き換え'(L1,Numbers,L2),
        concat_atom(L2,_置き換えられた文字列).

'2桁以上の整数を、すべて+1する置き換え'([A|R1],Numbers,[A|R2]) :-
        \+(member(A,Numbers)),
        '2桁以上の整数を、すべて+1する置き換え'(R1,Numbers,R2).
'2桁以上の整数を、すべて+1する置き換え'(L1,Numbers,[S|R3]) :-
        '数値文字ならびの切り取り'(L1,Numbers,L4,R),
        concat_atom(L4,A),
        atom_to_term(A,N),
        N2 is N + 1,
        write_formatted_atom(S,'%02d',[N2]),
        '2桁以上の整数を、すべて+1する置き換え'(R,Numbers,R3).

数値文字ならびの切り取り([],Numbers,[],[]) :- !.
数値文字ならびの切り取り([A|R],Numbers,[],[A|R]) :- \+(member(A,Numbers)),!.
数値文字ならびの切り取り([A|R1],Numbers,[A|R2],R3) :-
        数値文字ならびの切り取り(R1,Numbers,R2,R3).