このディレクトリの索引
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}; と初期化する。' :-
         '5教科を定義する'([英語,数学,国語,理科,社会]),
         得点を定義する(a,[英語,数学,国語,理科,社会],[55,32,67,61,77]),
         得点を定義する(b,[英語,数学,国語,理科,社会],[74,80,56,78,42]),
         得点を定義する(c,[英語,数学,国語,理科,社会],[38,67,78,62,82]).

'5教科を定義する'(_教科ならび) :-
        forall(nth0(_,_教科ならび,_教科),assertz(教科(_教科))).

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


教科別の3人の平均点を求める(_教科,_3人の平均点) :-
        教科別の(_教科),
        '3人の平均点を求める'(_教科,_3人の平均点).

教科別の(_教科) :-
        教科(_教科).

'3人の平均点を求める'(_教科,_3人の平均点) :-
        '3人の合計点を求める'(_教科,_3人の合計点),
        _平均点 is _3人の合計点 / 3.

'3人の合計点を求める'(_教科,_3人の合計点) :-
        findall(_得点,得点(_,_教科,_得点),_得点ならび),
        sum_list(_得点ならび,_3人の合計点).