このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1276810079/148
#    http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10733.txt  
# 次の構造体について要素数3の構造体配列を宣言し、
# それぞれの値を標準入力(キーボードから入力)し、
# 各科目の平均点を表示するプログラムを作成しなさい。
# なお、表示は実効例通りになるようにすること。
#                
# struct Score{
# 	int english;   // 英語の点数
# 	int math;      // 数学の点数
# 	int physics; // 物理の点数
# 実効例
# 1人目
# 英語:(入力した点数)
# 数学:(入力した点数)
# 物理:(入力した点数)
# 2人目
# 英語:(入力した点数)
# 数学:(入力した点数)
# 物理:(入力した点数)
# 3人目
# 英語:(入力した点数)
# 数学:(入力した点数)
# 物理:(入力した点数)
# 英語の平均点は(英語の平均点の計算結果を表示)です。
# 数学の平均点は(数学の平均点の計算結果を表示)です。
# 物理の平均点は(物理の平均点の計算結果を表示)です。

構造体(点数([英語(_英語),数学(_数学),物理(_物理)])).

要素数3の構造体配列を宣言 :-
        length(L,3),
        findall(L1,(member(L1,L),構造体(点数(L1))),X),
        assertz(構造体配列(点数構造体ならび,X)).

:- 要素数3の構造体配列を宣言.

'それぞれの値を標準入力(キーボードから入力)し、各科目の平均点を表示する'
        構造体配列(点数構造体ならび(L)),
        findall(L1,(member(L1,L),三科目を入力する(L1)),L),
        各科目の平均点を表示する(L).

三科目を入力する([]) :- !.
三科目を入力する([P|R]) :-
        P =.. [F,Q],
        write_formatted('%t:',[F]),get_integer(Q),
        三科目を入力する(R).

各科目の平均点を表示する(L) :-
        構造体(点数(L0)),        
        member(_科目構造,L0),
        _科目構造=..[_科目名,_点数],
        findavg(_点数,(member(L1,L),member(_科目構造,L1)),_平均点),
        write_formatted('%tの平均点は%tです。\n',[_科目名,_平均点]),
        fail.
各科目の平均点を表示する(_).