このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1276810079/421
#  [1] 授業単元: プログラム言語 
#  [2] 問題文(含コード&リンク): 
#   10 人の成績を入力し,その順位を成績と共に表示したい。以下の考え方に基づいた 
#  プログラムを作成せよ。 
#  1 ? 
#  2次元配列s[10][2] を用意する。 
#  2 ? 
#  i=0〜9 のfor 文を用いてs[i][0] に成績を入力する。 
#  3 ? 
#  s[0][0] とs[j][0],j=0〜9 を比較し,s[0][0] より大きい数値の個数n を数え 
#   る。その個数+1 が成績順位になるので,s[0][1] にn+1 を代入する。 
#  4 ? 
#  同様の操作をs[i][0],i=0〜9 に対して行なえば,その成績順位がs[i][1] とし 
#   て求められるので,あとは成績と共に表示すればよい。 
#   
#  

'10 人の成績を入力し,その順位を成績と共に表示する' :-
        '要素数10の変数ならびを二本用意する'(L1,L2),
        'L1に成績を入力する'(L1),
        'L1の先頭から順位を対応するL2の位置にセット'(1,10,L1,L2),
        二本のならびを順に表示(L1,L2).

'要素数10の変数ならびを二本用意する'(L1,L2) :-
        length(L1,10),length(L2,10).

'L1に成績を入力する'(L1) :-
        for(1,N,10),get_integer(_点数),list_nth(N,L1,_点数),N=10,!.

'L1の先頭から順位を対応するL2の位置にセット'(N,M,L1,L2) :- N > M,!.
'L1の先頭から順位を対応するL2の位置にセット'(N,M,L1,L2) :-
        list_nth(N,L1,_点数),list_nth(N,L2,_順位),
        count((member(_点数1,L1),_点数1 > _点数),_成績上位者数),_順位 is _成績上位者数 + 1,
        N2 is N + 1,
        'L1の先頭から順位を対応するL2の位置にセット'(N2,M,L1,L2).

二本のならびを順に表示(L1,L2) :-
        for(1,N,10),
        list_nth(N,L1,A),list_nth(N,L2,B),
        write_formatted('%t,%t位\n',[A,B]),
        N=10.