このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/301
#  [1] 授業単元:プログラミング演習  
#  [2] 問題文: 
#  http://ime.nu/codepad.org/3d8CbXUM 
#  上記のプログラムのfunc2のようにstatic変数を関数内で宣言して、main関数側で変数nに1つの偶数を入れると 
#  2からnまでの偶数の和と積を計算して出力するプログラムを作成しなさい。 
#  

'2からnまでの偶数の和と積を計算して出力する'(_n) :-
        '2からnまでの偶数の和と積を計算して'(_n,_2から_nまでの偶数の和,_2から_nまでの偶数の積),
        出力する(_n,_2から_nまでの偶数の和,_2から_nまでの偶数の積).

'2からnまでの偶数の和と積を計算して'(_n,_2から_nまでの偶数の和,_2から_nまでの偶数の積) :-
        '2からnまでの'(_n,_2から_nまでのならび),
        偶数の和(_2から_nまでのならび,_2から_nまでの偶数の和),
        偶数の積(_2から_nまでのならび,_2から_nまでの偶数の積).

'2からnまでの'(_n,_2から_nまでのならび) :-
        findall(M,(
                    between(2,_n,M)),
               _2から_nまでのならび).

偶数の和([],0).
偶数の和([N|R],_和) :-
        偶数(N),
        偶数の和(R,_和_1),
        _和 is _和_1 + N.
偶数の和([N|R],_和) :-
        \+(偶数(N)),
        偶数の和(R,_和).

偶数の積([],1).
偶数の積([N|R],_積) :-
        偶数(N),
        偶数の積(R,_積_1),
        _積 is _積_1 * N.
偶数の積([N|R],_積) :-
        \+(偶数(N)),
        偶数の積(R,_積).

偶数(M) :-
        0 is M mod 2.

出力する(_n,_2から_nまでの偶数の和,_2から_nまでの偶数の積) :-
        writef('2から%tまでの偶数の和は%tです\n',[_n,_2から_nまでの偶数の和]),
        writef('2から%tまでの偶数の積は%tです\n',[_n,_2から_nまでの偶数の積]).