このディレクトリの索引
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桁以下の数),
        number_codes(_4桁以下の数,Codes),
        findsum(_左端からn桁目の数のn乗,(
                    append(L0,[_左端からn桁目のcode|_],Codes),
                    length([_|L0],_n),
                    _左端からn桁目の数のn乗 is truncate((_左端からn桁目のcode-48) ^ _n),
                _4桁以下の数).

findsum(_選択項,_項,_合計値) :-
        findall(_選択項,_項,_値ならび),
        sum(_値ならび,_合計値).

sum([],0).
sum([N|R],S) :-
        sum(R,S_1),
        S is S_1 + N.