このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/134
#  内容: 
#   [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):http://ime.nu/ideone.com/t5qL2 
#  
#  名前(半角英字によるローマ字表記),身長[cm],体重[kg]を入力し,
#  BMI指数の小さい順に並べた線形リストを作成した上で,
#  BMI指数の小さい順にBMI指数,身長,体重,名前を出力するプログラムを作成せよ。
#  ただし,入力件数は不定とし,名前の1文字目に'0'を入れることでデータ入力を終了するものとする。
#   
#  BMI指数は以下の式で算出できる。
#  BMI = 体重[kg]/(身長[m])^2


'名前(半角英字によるローマ字表記),身長[cm],体重[kg]を入力し,BMI指数の小さい順に並べた線形リストを作成した上で,BMI指数の小さい順にBMI指数,身長,体重,名前を出力する。ただし,入力件数は不定とし,名前の1文字目に"0"を入れることでデータ入力を終了するものとする' :-
        '名前(半角英字によるローマ字表記),身長[cm],体重[kg]を入力し,'(_BMI指数を鍵とした線形リスト),
        'BMI指数の小さい順に並べた線形リストを作成した上で'(_BMI指数を鍵とした線形リスト,_BMI指数の小さい順に並べた線形リスト),
        'BMI指数の小さい順にBMI指数,身長,体重,名前を出力する'(_BMI指数の小さい順並べた線形リスト).

'名前(半角英字によるローマ字表記),身長[cm],体重[kg]を入力し,'(_BMI指数を鍵とした線形リスト) :-
        findall([_BMI指数,_名前,_身長,_体重],(
                    名前を得る(_名前),
                    (
                        sub_atom(_名前,0,1,_,'0'),!,fail;
                        '身長[cm],体重[kg]を入力'(_身長,_体重),
                        'BMI指数を算出する'(_身長,_体重,_BMI指数))),
                _BMI指数を鍵とした線形リスト).

名前を得る(_名前) :-
        write('名前(半角英字によるローマ字表記)を入力してください : '),
        get_line(_名前),
        半角英字によるローマ字表記(_名前).
名前を得る(_名前) :-
        名前を得る(_名前).

'身長[cm],体重[kg]を入力'(_身長,_体重) :-
        数を得る('身長[cm]',_身長),
        数を得る('体重[kg]',_体重),!.

'BMI指数を算出する'(_身長,_体重,_BMI指数) :-
        _BMI指数 is _体重 / (_身長 ^ 2).

'BMI指数の小さい順に並べた線形リストを作成した上で'(_BMI指数を鍵とした線形リスト,_BMI指数の小さい順に並べた線形リスト) :-
        sort(_BMI指数を鍵とした線形リスト,_BMI指数の小さい順に並べた線形リスト).

'BMI指数の小さい順にBMI指数,身長,体重,名前を出力する'([]).
'BMI指数の小さい順にBMI指数,身長,体重,名前を出力する'([[_BMI指数,_氏名,_身長,_体重]|R]) :-
        writef('%t,%t,%t,%t\n',[_BMI指数,_身長,_体重,_名前]),
        'BMI指数の小さい順にBMI指数,身長,体重,名前を出力する'(R).

半角英字によるローマ字表記(_名前) :-
        findall(_文字,(
                    sub_atom(_名前,_,1,_,_文字),
                    空白または半角英字の文字(_文字)),
                _空白または半角英字であった文字ならび),
        atomic_list_concat(_空白または半角英字であった文字ならび,_名前).

空白または半角英字の文字(' ').
空白または半角英字の文字(_文字) :-
        _文字 @>= 'A',
        _文字 @=< 'Z'.
空白または半角英字の文字(_文字) :-
        _文字 @>= 'a',
        _文字 @=< 'z'.


%  数を得る/2