このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/54
#  {1] 授業単元:プログラミング演習 
#  [2] 問題文: 
#  http://ime.nu/codepad.org/Q5HCQPvq 
#  上記のプログラムを参考にしてa君、b君、c君の5教科(英語、数学、国語、理科、社会)の試験の得点をそれぞれ 
#  a[5]={55,32,67,61,77};,b[5]={74,80,56,78,42};,c[5]={38,67,78,62,82}; と初期化する。 
#  但し上記の3つの配列の要素番号0,1,2,3,4の得点は、それぞれ英語、数学、国語、理科、社会の得点に対応する。 
#  このとき、教科別の3人の平均点を求めるプログラムをポインタ配列を用いて作成せよ。 
#  

'a君、b君、c君の5教科(英語、数学、国語、理科、社会)の試験の得点をそれぞれ a[5]={55,32,67,61,77};,b[5]={74,80,56,78,42};,c[5]={38,67,78,62,82}; と初期化する。' :-
         得点を定義する(a,[英語,数学,国語,理科,社会],[55,32,67,61,77]),
         得点を定義する(b,[英語,数学,国語,理科,社会],[74,80,56,78,42]),
         得点を定義する(c,[英語,数学,国語,理科,社会],[38,67,78,62,82]).

得点を定義する(_,[],[]).
得点を定義する(_君,[_科目|R1],[_得点|R2]) :-
        assertz(得点(_君,_科目,_得点)),
        得点を定義する(_君,R1,R2).

教科別の3人の平均点を求める(_科目,_相加平均) :-
        教科別の3人の平均点を求める(_科目別相加平均ならび),
        member([_科目,_相加平均],_科目別相加平均ならび).

教科別の3人の平均点を求める(_科目別相加平均ならび) :-
        finsetof(_科目,(
                    得点(_,_科目,_)),
                 _教科ならび),

        findall([_科目,_相加平均],(
                    member(_科目,_教科ならび),
                    findavg(_得点,(
                                得点(_,_科目,_得点)),
                             _相加平均)),
                _科目別相加平均ならび).