このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1325685876/782
#  [1] 授業単元:プログラミング 
#  [2] 問題文: 
#  5つの優先度付きデータを作成する。優先度が最も高いものを1つ削除して新しい優先度付きデータを1つ挿入し優先度順に並べ替えて表示することを指定回数繰り返すプログラムを作成しなさい。 
#  なお優先度はランダムに発生させた数字の高いものから優先度が高いものとする。 
#  例: 
#  {データ番号,優先度(ランダム)}={1,1.4},{2,4.3},{3,2.1},{4,1.1},{5,9.7}だとすると 
#  優先度の高い5を削除して、新たに{6,7.8(ランダム)}を挿入したとすると6→2→3→1→4と表示されるようにする。 
#  

'5つの優先度付きデータを作成する。優先度が最も高いものを1つ削除して新しい優先度付きデータを1つ挿入し優先度順に並べ替えて表示することを指定回数繰り返す'(_指定回数,LL1,LL) :-
        '5つの優先度付きデータを作成する。優先度が最も高いものを1つ削除して新しい優先度付きデータを1つ挿入し優先度順に並べ替えて表示することを指定回数繰り返す'(1,_指定回数,LL1,LL).

'5つの優先度付きデータを作成する。優先度が最も高いものを1つ削除して新しい優先度付きデータを1つ挿入し優先度順に並べ替えて表示することを指定回数繰り返す'(N,_指定回数,LL,LL) :-
        N > _指定回数,!.
'5つの優先度付きデータを作成する。優先度が最も高いものを1つ削除して新しい優先度付きデータを1つ挿入し優先度順に並べ替えて表示することを指定回数繰り返す'(N,_指定回数,LL1,LL) :-
        最も優先順位の高いデータを取り除く(LL1,L0,R),
        新たなデータを追加する(N,L0,R,LL2),
        大きい順に表示する(LL2),
        N2 is N + 1,
        コントロールブロック(N2,_指定回数,LL2,LL).

最も優先順位の高いデータを取り除く(LL1,L0,R) :-
        append(L0,[[N,_優先順位_1]|R],LL1),
        \+((append(L1,[[N_2,_優先順位_2]|R2],R),_優先順位_2 > _優先順位_1)),!.

新たなデータを追加する(N,L0,R,LL2) :-
        M is N + 5,
        _優先度 is random(100\\\) / 10,
        append(L0,[[M,_優先度]|R],LL2).       

優先順位の大きい順にデータ番号を表示する(LL) :-
        findall([_優先順位,_データ番号],(
                    member([_データ番号,_優先順位],LL)),
                LL1),
        sort(LL1,LL2),
        reverse(LL2,[[_,N1],[_,N2],[_,N3],[_,N4],[_,N5]]),
        writef('%t->%t->%t->%t->%t\n',[N1,N2,N3,N4,N5]).