このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1153585095/38
#  http://pc8.2ch.net/test/read.cgi/tech/1152253441/215 
#  【 課題 】キーボードから10個の数字を入力する。 
#        隣同士の足し算をし、以下の例のように1の位の数字を次の行に出力し、 
#        最後に残った数字を出力する。 
#   
#        (例) 
#        数字を入力してください。 
#        2359318473 
#   
#        2 3 5 9 3 1 8 4 7 3 
#         5 8 4 2 4 9 2 1 0 
#         3 2 6 6 3 1 3 1 (以下略 
#   
#        最後に残った数字は 2 です。 
# 

'キーボードから10個の数字を入力する。
隣同士の足し算をし、以下の例のように1の位の数字を次の行に出力し、
最後に残った数字を出力する。' :-
        write('10個の数字列を入力してください :'),
        'n個の数字ならびを得る'(10,L),
        modulus_t3(L,X),
        writef('残った数字は: %t です\n',[X]).

modulus_t3([X],X).
modulus_t3(L,X) :-
        modulus_t3_1(L,L2),
        modulus_t3(L2,X).

modulus_t3_1([_],[]).
modulus_t3_1([A,B|R1],[C|R2]) :-
        C is (A+B) mod 10,
        modulus_t3_1([B|R1],R2).

'n個の数字ならびを得る'(N,L) :-
        findall(X,(
                    between(1,N,_),数字を得る(X)),
                L).

数字を得る(N) :-
        get_code(C),
        N is C - 48,
        between(0,9,N),!.
数字を得る(N) :-
        数字を得る(N).