このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1258320456/247
# 
#  【 課題 】
#  ある 3桁の数とそれぞれの桁を逆に並べた 3桁の数を足し合わせ
#  それが回文数になるまで同じ操作を繰り返したとき
#  最も回文数になりにくい 3桁の数を見つけてください

'ある 3桁の数とそれぞれの桁を逆に並べた 3桁の数を足し合わせそれが回文数になるまで同じ操作を繰り返したとき最も回文数になりにくい 3桁の数を見つけてください'(_最も回文数になりにくい3桁の数) :-
        findmax([_回文数になるまでの繰り返し回数,_ある3桁の数ならび],(
                    'ある 3桁の数'(_ある3桁の数ならび),
                    reverse(_ある3桁の数ならび,_反転したある3桁の数ならび),
                    回文数になるまで繰り返す([],_ある3桁の数ならび,_反転したある3桁の数ならび,_回文数になるまでの繰り返し回数)),
                [_回文数になるまでの繰り返し回数,_最も回文数になりにくい3桁の数ならび]),
        number_chars(_最も回文数になりにくい3桁の数,_最も回文数になりにくい3桁の数ならび),!.

回文数になるまで繰り返す(Ln,L,L,_回文数になるまでの繰り返し回数) :-
        length(Ln,_回文数になるまでの繰り返し回数),!.
回文数になるまで繰り返す(Ln,L1,L2,_回文数になるまでの繰り返し回数) :-
        number_chars(N1,L1),
        number_chars(N2,L2),
        N3 is N1 + N2,
        number_chars(N3,L3),
        reverse(L3,L4),
        回文数になるまで繰り返す([_|Ln],L3,L4,_回文数になるまでの繰り返し回数),!.

'ある 3桁の数'([A1,A2,A3]) :-
        member(A1,['0','1','2','3','4','5','6','7','8','9']),
        member(A2,['0','1','2','3','4','5','6','7','8','9']),
        member(A3,['0','1','2','3','4','5','6','7','8','9']).

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

'ある 3桁の数とそれぞれの桁を逆に並べた 3桁の数を足し合わせそれが回文数になるまで同じ操作を繰り返したとき最も回文数になりにくい 3桁の数を見つけてください'(_最も回文数になりにくい3桁の数) :-
        findmax([_回文数になるまでの繰り返し回数,_ある3桁の数ならび],(
                    'ある 3桁の数'(_ある3桁の数),
                    回文数になるまで繰り返す([],_ある3桁の数,_回文数になるまでの繰り返し回数)),
                [_回文数になるまでの繰り返し回数,_最も回文数になりにくい3桁の数]),!.

回文数になるまで繰り返す(Ln,N_回文数になるまでの繰り返し回数) :-
        reverse_integer(N1,N2),
        \+(N1=N2),
        N3 is N1 + N2,
        回文数になるまで繰り返す([_|Ln],N3,_回文数になるまでの繰り返し回数),!.
回文数になるまで繰り返す(Ln,N,_回文数になるまでの繰り返し回数) :-
        length(Ln,_回文数になるまでの繰り返し回数),!.

reverse_integer(N1,N2) :-
        integer_integers(N1,NL1),
        reverse(NL1,NL2),
        integer_integers(N2,NL2),!.

integer_integers(N,L) :-
        integer(N),
        number_codes(N,Codes),
        findall(M,(
                    append(_,[M1|_],Codes),
                    M is M1 - 48),
                L),!.
integer_integers(N,L) :-
        var(N),
        findall(Code,(
                    append(_,[M|_],L),
                    Code is M + 48),
                L1),
        number_codes(N,L1),!.

ある3桁の数(_ある3桁の数) :-
        for(100,_ある3桁の数,999).