このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1357748713/705
#  [1] 授業単元:プログラミング演習 
#  [2] 問題文(含コード&リンク) 
#  [3] 環境 
#  問題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 
#  [3.1] OS: unix 
#   [3.2] コンパイラ名とバージョン: gcc 
#   [3.3] 言語: C 
#  [4] 期限:2月19日 
#  [5] その他の制限: なし 
#  よろしくお願いします。 

球の体積を計算する(_球の半径,_球の体積) :-
        count((
                    between(1,100000,_),
                    '3座標を乱数で得る'(X,Y,Z),
                    原点からの距離が球の半径の範囲(X,Y,Z)),
                _球の半径の範囲内の個数),
        _球の体積 is (_球の半径の範囲内の個数 / 100000) * (_球の半径 ^ 3) * 8.

'3座標を乱数で得る'(X,Y,Z) :-
        X is random(1001) / 1000,
        Y is random(1001) / 1000,
        Z is random(1001) / 1000.

原点からの距離が球の半径の範囲(X,Y,Z) :-
        sqrt(X ^ 2 + Y ^ 2 + Z ^ 2) =< 1.0.

count(P,N) :-
        findsum(1,P,F),
        N is truncate(F).

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

sum(L,Sum) :-
        sum(L,0,Sum).

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