このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1280653311/120
#  [1] 授業単元: 
#  C++プログラミング 
#  [2] 問題文(含コード&リンク): 
#  http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10909.txt 
#  
# 得点と名前を5つ入力すると,得点の高いものから順に出力せよ。名前は最大20文字までとする。
# stringクラスは使用しないこと。
# 
# 
# 実行例
# name1?sato 
# score1?10 
# -------------------
# name2?tanaka 
# score2?40 
# -------------------
# name3?suzuki
# score3?95 
# -------------------
# name4?kimura 
# score4?60 
# -------------------
# name5?mori 
# score5?50 
# -------------------
# 
# suzuki:95
# 
# kimura:60
# 
# mori:50
# 
# tanaka:40
# 
# sato:10
# 

'得点と名前を5つ入力すると,得点の高いものから順に出力せよ。名前は最大20文字までとする。' :-
        write('空白で区切って得点と名前を5つ(5行)入力してください : '),
        findall([_得点,_名前],(
                    for(1,_,5),
                    '得点と名前の入力(名前は最大20文字までとする)'(_得点,_名前)),
                L1),
        sort(L1,L2),
        reverse(L2,L3),
        append(_,[_得点,_名前]|R],L3),
        write_formatted('%t:%t\n',[_得点,_名前]),
        R = [],!.

'得点と名前の入力(名前は最大20文字までとする)'(_得点,_名前) :-
        get_split_line([' '],[_得点,_名前]),
        atom_length(_名前,_長さ),
        診断(_得点,_長さ),!.        
'得点と名前の入力(名前は最大20文字までとする)'(_得点,_名前) :-
        '得点と名前の入力(名前は最大20文字までとする)'(_得点,_名前).

診断(_得点,_長さ) :-
        \+(integer(_得点)),
        write_formatted('得点が%tと入力されました。得点は整数です。再入力をお願いします\n',[_得点]),
        !,fail.
診断(_得点,_長さ) :- _長さ =< 20,!.
診断(_得点,_長さ) :-
        write_formatted('名前の長さが%t文字あります。20文字以下になるように再入力をお願いします\n',[_長さ]),!,
        fail.