このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/668
#  [1] 授業単元: 構造体 
#  [2] 問題文(含コード&リンク): :char name[20],int english,int mathematics をメンバとする構造体 score を定義せよ。 
#   
#  :以下の5人の情報をもつ配列 seito[5] を、,悩鄒した構造体 score 型を使って宣言せよ。なお、5人の情報は初期値として宣言することにする。 
#  name       english  mathematics 
#  ”yamada” 50       70 
#  ”tanaka” 70       60 
#  ”suzuki” 80       70 
#  ”yamamoto”40      60 
#  ”sakata” 90       80 
#   
#  :△能藉値を代入した構造体 score 型の構造体配列 seito[5] を宣言し、各メンバ変数でソートする関数を作成せよ。 
#   
#    

score(yamada,50,70).
score(tanaka,70,60).
score(suzuki,80,70).
score(yamamoto,40,60). 
score(sakata,90,80).


構造体定義(_述語名/_アリティ,_項目名ならび,_述語,_引数ならび,_構造体,_項目名構造体ならび) :-
        length(_引数ならび,_アリティ),
        length(_項目名構造体ならび,_アリティ),
        _述語 =.. [_述語名|_引数ならび],
        _構造体 =.. [_述語名|_項目名構造体ならび].

述語定義から構造体ならびへの変換(_述語名/_アリティ,_項目名ならび,_構造体ならび) :-
        構造体定義(_述語名/_アリティ,_項目名ならび,_述語,_引数ならび,_構造体,_項目名構造体ならび),
        findall(_構造体,(
                    call(_述語),
                    項目名構造体ならび(_項目名ならび,_引数ならび,_項目名構造体ならび)),
                _構造体ならび).

項目名構造体ならび([],_,[]) :- !.
項目名構造体ならび([_項目名|R1],[_項|R2],[P|R3]) :-
        P =.. [_項目名,_項],
        項目名構造体ならび(R1,R2,R3).


%  実行例
%  ?- 述語定義から構造体ならびへの変換(score/3,[name,english,mathematics],L).
%  
%  L = [score(name(yamada),english(50),mathematics(70)), ... ,score(name(sakata),englisth(90),mathematics(80))]
%