このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1276873238/693
#  問題 
#   
#  左端からn桁目の数のn乗を合計したものが元の数に等しい4桁以下の数をすべて求めよ。 
#  例 
#  89 => 8^1 + 9^2 = 89 OK 
#  123 => 1^1 + 2^2 + 3^3 = 14 NG 
# 

'左端からn桁目の数のn乗を合計したものが元の数に等しい4桁以下の数をすべて求める'(_4桁以下の数) :-
        between(0,9999,_4桁以下の数),
        '4要素以下の数ならび'(_4桁以下の数,[],_4要素以下の数ならび),
        '左端からn桁目の数のn乗を合計したものが元の数に等しい'(_4要素以下の数ならび,_4桁以下の数).

'4要素以下の数ならび'(_4要素以下の数ならび,_左端からn桁目の数のn乗を合計したもの) :-
        '4要素以下の数ならび'(1,_4要素以下の数ならび,0,_左端からn桁目の数のn乗を合計したもの).

'4要素以下の数ならび'(_nth,_4要素以下の数ならび,S,S) :-
        _nth > 4,!.
'4要素以下の数ならび'(_nth_1,_4要素以下の数ならび,S_1,S) :-
        nth1(_nth_1,_4要素以下の数ならび,X),
        S_2 is S_1 + truncate(X ^ _nth1),
        _nth_2 is _nth_1 + 1,
        '4要素以下の数ならび'(_nth_1,_4要素以下の数ならび,S_2,S).

'4要素以下の数ならび'(0,L,L) :- !.
'4要素以下の数ならび'(N,L_1,L) :-
        M is N mod 10,
        N_1 is N // 10,
        '4要素以下の数ならび'(N_1,[M|L_1],L).