このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/232
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文: 
#  預金高a、年利r、年数nを受け取ると、利子(複利)を含めたn年後の預金高を返すyokin関数を作成。 
#  そして預金高a、年利r、年数nを入力すると1年後からn年後までの利子を含めた預金高を計算し、出力するプログラムを 
#  main関数からyokin関数を呼び出す形で作成しなさい。 
#  但し、利子は複利で加算されるとし、年利rは百分率で入力する。  
#  

'預金高a、年利r、年数nを受け取ると、利子(複利)を含めたn年後の預金高を返す'(_a,_r,_n,_利子を含めたn年後の預金高) :-
        _利子を含めたn年後の預金高 is truencate(_a * (1 + _r) ^ (_n - 1)).

'預金高a、年利r、年数nを入力すると1年後からn年後までの利子を含めた預金高を計算し、出力する' :-
        '預金高a、年利r、年数nを入力すると'(_a,_r,_n),
        '1年後からn年後までの利子を含めた預金高を計算し、出力する'(_a,_r,_n).

'預金高a、年利r、年数nを入力すると'(_a,_r,_n) :-
        預金高aを入力する(_a),
        年利rを入力する(_r),
        年数nを入力する(_n),!.

預金高aを入力する(_a) :-
        write('預金高aを入力してください : '),
        get_integer(_a),
        _a >= 0,!.
預金高aを入力する(_a) :-
        預金高aを入力する(_a).

年利rを入力する(_r) :-
        write('年利rを100分率で入力してください : '),
        get_line(Line),
        年利rを入力診断(Line,_r),!.
年利rを入力する(_r) :-
        年利rを入力する(_r).

年利rを入力診断(Line,_r) :-
        atom_to_term(Line,_r,_),
        number(_r),
        _r >= 0.0,!.
年利rを入力診断(Line,_r) :-
        writef('入力された %t からは年利rとして適切な値が得られません。\n',[Line]),
        fail.

預金高aを入力する(_a) :-
        write('預金高aを入力してください : '),
        get_integer(_a),!.
預金高aを入力する(_a) :-
        預金高aを入力する(_a).

'1年後からn年後までの利子を含めた預金高を計算し、出力する'(_a,_r,_n) :-
        '1年後からn年後までの利子を含めた預金高を計算し'(_a,_r,_n,_利子を含めたn年後の預金高),
        出力する(_a,_r,_n,_利子を含めたn年後の預金高).

'1年後からn年後までの利子を含めた預金高を計算し'(_a,_r,_n,_1年後からn年後までの利子を含めた預金高ならび) :-
        findall([_n年後,_利子を含めたn年後の預金高],(
                    for(1,_n年後,_n),
                    '預金高a、年利r、年数nを受け取ると、利子(複利)を含めたn年後の預金高を返す'(_a,_r,_n,_利子を含めたn年後の預金高)),
                _1年後からn年後までの利子を含めた預金高ならび).

出力する(_a,_r,_n,_利子を含めたn年後の預金高ならび) :-
        writef('預金高a = %t、年利r = %t、年数n = %t\n',[_a,_r,_n]),
        append(_,[[_n年後,_利子を含めたn年後の預金高]|R],_利子を含めたn年後の預金高ならび),
        writef('%t年後の利子を含めた預金高は %t\n',[_n年後,_利子を含めたn年後の預金高]),
        R = [].