このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354070278/992
#  [2] 問題文(含コード&リンク):2つの数列の相関係数を求めるプログラムを作成する。 
#  

'2つの数列の相関係数を求める'(_数列a,_数列b,_相関係数) :-
        相加平均(_数列a,_数列aの相加平均),
        相加平均(_数列b,_数列bの相加平均),
        分子計算(_数列a,_数列b,_数列aの相加平均,_数列bの相加平均,_相関係数式の分子),
        分母計算(_数列a,_数列b,_数列aの相加平均,_数列bの相加平均,_相関係数式の分母),
        _相関係数 is _相関係数式の分子 / _相関係数式の分母.

分子計算(_数列a,_数列b,_数列aの相加平均,_数列bの相加平均,_分子) :-
        findsum(S,(
                    nth1(_nth1,_数列a,_数列aの要素),
                    nth1(_nth1,_数列b,_数列bの要素),
                    S is (_数列aの要素 - _数列aの相加平均) * (_数列bの要素 - _数列bの相加平均)),
                _分子).

分母計算(_数列a,_数列b,_数列aの相加平均,_数列bの相加平均,_分母) :-
        findsum_a(_数列a,_数列aの相加平均,S_a),
        findsum_b(_数列b,_数列bの相加平均,S_b),
        _分母 is S_a * S_b.

findsum_a(_数列a,_数列aの相加平均,S) :-
        findsum(U,(
                    member(_x,_数列a),
                    U is (_x - _数列aの相加平均) ^ 2),
               S).

findsum_b(_数列b,S) :-
        findsum(U,(
                    member(_x,_数列b),
                    U is (_x - _数列bの相加平均) ^ 2),
               S).