このディレクトリの索引
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),
                    偶数(M)),
               _2から_nまでの偶数のならび).

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

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

積([],1).
積([N|R],_積) :-
        積(R,_積_1),
        _積 is _積_1 * N.

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