このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/935
#  [1] 授業単元:C言語演習 
#  [2] 問題文: 
#  学生の英語、国語、数学の合計の得点データを処理するために、次のようなデータ型と名前のメンバを持つ構造体を考える。 
#   氏名 : 文字型 name[20] 
#   英語得点 : 整数型 eigo 
#   国語得点 : 整数型 kokugo 
#   数学 : 整数型 sugaku 
#  SCORE型の構造体配列data[5]を宣言せよ。 
#  そしてキーボードから5人分のデータ(番号、氏名、各教科の得点)を入力すると、最高得点の学生の氏名とその得点を英語、国語、数学の各教科毎に出力するプログラムを作成せよ。 
#  <データ例> 
#  番号 氏名 英語得点 国語得点 数学得点 
#  1  nakashima 75   70    75 
#  2  takada  85   65    70 
#  3  arita   80   80    80 
#  4  shimane  65   75    55 
#  5  hirakata 70   77    90 
#  <出力例> 
#  英語 takada 85 
#  国語 arita 80 
#  数学 hirakata 90 
#  

'キーボードから5人分のデータ(番号、氏名、各教科の得点)を入力すると、最高得点の学生の氏名とその得点を英語、国語、数学の各教科毎に出力する' :-
        length(Ln,5),
        'キーボードから5人分のデータ(番号、氏名、各教科の得点)を入力すると'(Ln),
        '最高得点の学生の氏名とその得点を英語、国語、数学の各教科毎に出力する'.

'キーボードから5人分のデータ(番号、氏名、各教科の得点)を入力すると'([]).
'キーボードから5人分のデータ(番号、氏名、各教科の得点)を入力すると'([_|Ln]) :-
        'データ(番号、氏名、各教科の得点)を入力すると',
        'キーボードから5人分のデータ(番号、氏名、各教科の得点)を入力すると'(Ln).

'データ(番号、氏名、各教科の得点)を入力すると' :-
        変数XXを得る(XX),
        整数を得る(番号,_番号),
        氏名を得る(_氏名),
        各教科の得点を得る(_英語の得点,_国語の得点,_数学の得点),
        データを定義する(XX,_番号,_氏名,_英語の得点,_国語の得点,_数学の得点).

'最高得点の学生の氏名とその得点を英語、国語、数学の各教科毎に出力する' :-
        append(_,[_教科|R],[英語,国語,数学]),
        教科の最高得点を得る(_教科,_氏名,_最高得点),
        writef('%t の最高得点者は %t 得点は %t\n',[_教科,_氏名,_最高得点]).
        R = [].

教科の最高得点を得る(_教科,_氏名,_最高得点) :-
        findmax([_得点,_氏名],(
                    成績(XX,_教科,_得点),
                    成績(XX,氏名,_氏名)),
                _最高得点).

変数xxを得る(_XX) :-
        N is random(99999999) + 1,
        整数から文字列(8,N,A),
        atomic_list_concat([x,A],_XX),
        \+(成績(_XX,番号,_)),!.
変数xxを得る(_XX) :-
        変数xxを得る(_XX).