このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1294061094/626
#  [1] 授業単元:プログラミング演習  
#  [2] 問題文(含コード&リンク) 
#  
#  問題1メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して,
#  n1のn2乗を計算し,結果をメイン関数で表示するプログラムを書きなさい.
#  <実行例>
#  二つの整数を入力してください.
#  n1 = 5
#  n2 = 2
#  5の2乗は25です.
#  問題2 5人の点数を読み込んでいき、その最高点を表示するプログラムを作成しなさい。
#  問題3 円の面積の一覧表を計算するプログラムを作成しなさい。
#  <実行結果>
#  半径 --- 面積
#  1.0 --- 3.14
#  1.1 --- 3.80
#  1.2 --- 4.52
#  1.3 --- 5.31
#  問題4 球の体積を計算するプログラムを作成しなさい。
#  実行例
#  体積 = 1766.25

'メイン関数でキーボードから二つの整数n1とn2を読み込み,それらをexponent関数を呼び出して,n1のn2乗を計算し,結果をメイン関数で表示する' :-
        メイン.        

メイン :-
        キーボードから二つの整数n1とn2を読み込み(_n1,_n2),
        exponent(_n1,_n2,_結果),
        writef('%tの%t乗は%tです\n',[_n1,_n2,_結果]).

キーボードから二つの整数n1とn2を読み込み(_n1,_n2) :-
        キーボードからn1を読み込み(_n1),
        キーボードからn2を読み込み(_n2).

キーボードからn1を読み込み(_n1) :-
        write('n1 = '),
        get_line(Line),
        キーボードからn1を読み込み診断(Line,_n1),!.
キーボードからn1を読み込み(_n1) :-
        キーボードからn1を読み込み(_n1).

キーボードからn1を読み込み診断(Line,_n1) :-
        atom_to_term(Line,_n1,_),
        integer(_n1),!.
キーボードからn1を読み込み診断(Line,_n1) :-
        writef('入力された %t からは整数が得られません。再入力をお願いします\n',[Line]),
        fail.

キーボードからn2を読み込み(_n2) :-
        write('n2 = '),
        get_line(_n2),
        キーボードからn2を読み込み診断(Line,_n2),!.
キーボードからn2を読み込み(_n2) :-
        キーボードからn2を読み込み(_n2).

キーボードからn2を読み込み診断(Line,_n2) :-
        atom_to_term(Line,_n2,_),
        integer(_n2),!.
キーボードからn2を読み込み診断(Line,_n2) :-
        writef('入力された %t からは整数が得られません。再入力をお願いします\n',[Line]),
        fail.

exponent(_n1,0,1) :- !.
exponent(_n1,1,_n1) :- !.
exponent(_n1,_n2,_結果) :-
        exponentで定数が整数の時は(_n1,_n2,_結果).
exponent(_n1,_n2,_結果) :-
        exponentで定数が負数の時は(_n1,_n2,_結果).

exponentで定数が整数の時は(_n1,_n2,_結果).
        _n2 > 0,
        _n2_1 is _n2 - 1,
        exponent(_n1,_n2_1,_結果_1),
        _結果 is _n1 * _結果_1.        

exponentで定数が負数の時は(_n1,_n2,_結果) :-
        _n2 < 0,
        _n2_1 is _n2 + 1,
        exponent(_n1,_n2_1,_結果_1),
        _結果 is _結果_1 / _n1.


%  get_line/1