このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1328276597/896
#  [1] 授業単元: プログラミング  
#  [2] 問題文(含コード&リンク):  
#  1からNまでの値の中で3の倍数の和を求めるプログラムkadai2.cを書きなさい。但しNはキーボードから入力するものとして,出力は以下で出力されるものとする。 
#   printf("sum = %d\n", answer); 
#    
#  

'1からNまでの値の中で3の倍数の和を求める。ただしNはキーぼどから入力するものとする' :-
        'Nはキーぼどから入力する'(N),
        '1からNまでの値の中で3の倍数の和を求める'(N,_1からNまでの値の中で3の倍数の和),
        writef('1から%tまでの値の中で3の倍数の和=%t\n',[_1からNまでの値の中で3の倍数の和]).

'1からNまでの値の中で3の倍数の和を求める'(N,_1からNまでの値の中で3の倍数の和) :-
        findsum(M,(
                    for(1,M,N),
                    0 is M mod 3),
                _1からNまでの値の中で3の倍数の和).

'Nはキーぼどから入力する'(N) :-
        write('0より大きい整数 N を入力して下さい : '),
        get_line(Line),
        整数入力検査(Line,N),!.
'Nはキーぼどから入力する'(N) :-
        'Nはキーぼどから入力する'(N).

整数入力検査(Line,N) :-
        atom_to_term(Line,N,_),
        integer(N),
        N > 0,!.
整数入力検査(Line,N) :-
        writef('入力された %t からは適切な N が得られません。再入力をお願いします。\n',[Line]),
        fail.

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

sum([],0).
sum([N|R],Sum) :-
        sum(R,Sum_1),
        Sum is Sum_1 + N.