このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/569
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):  
#  int k を受け取り, 以下の級数  
#   
#  Sk= 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... + (-1)k/(2k+1)  
#  の値を返す関数 double my_series ( int k ) を作成せよ. main 文では scanf で int n を受け取り, 級数 Sk の値を k = 0, 1, 2, ..., n について計算し, 結果を表示せよ.  
#  (ヒント k が大きくなると 4Sk は円周率に近づく.)  
#   

f(X,Y) :- Y is (-1) * X / ( 2 * X + 1).

'Sk= 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... + (-1)k/(2k+1)'(_k,_SK) :-
        findsum(S,
                    for(1,N,_k),
                    f(N,S)),
                _SK).

main(_n) :-
        for(0,_k,_n),
        'Sk= 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ... + (-1)k/(2k+1)'(_k,_SK),
        writef('%t\n',[_SK]),
        _k = _n,!.