このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1291471791/111
#  [1] 授業単元:アルゴリズム 
#  [2] 問題文  
#  ・正の値をキーボードから入力。-の値の場合停止。 
#  ・入力された値をヒープ配列(入力された値の並びをヒープに)に格納。配列の大きさはランダムにしておく。 
#  そして降順に並びかえて画面に出力 
#  

'正の値をキーボードから入力。-の値の場合停止。入力された値をヒープ配列(入力された値の並びをヒープに)に格納。配列の大きさはランダムにしておく。そして降順に並びかえて画面に出力 ' :-
        配列を生成,
        値をキーボードから入力(_値),
        '入力された値をヒープ配列(入力された値の並びをヒープに)に格納。配列の大きさはランダムにしておく。配列の大きさはランダムにしておく。'(_値).
        降順に並びかえて画面に出力.

'入力された値をヒープ配列(入力された値の並びをヒープに)に格納'(_負の値) :-
        '-の値の場合停止'(_負の値),!.
'入力された値をヒープ配列(入力された値の並びをヒープに)に格納'(_正の値) :-
        retract(heap(L1)),
        append(L1,[V|R],L2),
        var(V),
        全要素が変数でない(L1),
        V = _正の値,
        assertz(heap(L2)),
        値をキーボードから入力(_値の二),
        '入力された値をヒープ配列(入力された値の並びをヒープに)に格納'(_値の二),!.

配列を生成 :-
        _要素数 is (random mod 90) + 10,
        length(L,_要素数),
        assertz(heap(L)).

'-の値の場合停止'(_負の値) :-
        _負の値 < 0,!.

'値をキーボードから入力'(_値) :-
        write('整数を入力してください : '),
        get_line(Line),
        値をキーボードから入力の診断(Line,_値),!.
'値をキーボードから入力'(_値) :- '値をキーボードから入力'(_値).

値をキーボードから入力の診断(Line,_値) :-
        atom_to_term(Line,_値,_),
        integer(_値),!.
値をキーボードから入力の診断(Line,_値) :-
        write_formatted('入力された %t からは整数が得られません。再入力をお願いします。\n',[Line]),
        fail.

'降順に並びかえて画面に出力' :-
        heap(L1),
        append(L0,[V|_],L1),
        var(V),
        全要素が変数でない(L0),
        降順に並びかえて(L0,L2),
        画面に出力(L2).

全要素が変数ではない(L) :- 全要素が変数でない(L).

全要素が変数でない([]) :- !.
全要素が変数でない([A|R]) :-
        \+(var(A)),
        全要素が変数でない(R).

降順に並びかえて(L1,L2) :-
        sort(L1,L3),
        reverse(L3,L2).

画面に出力([]) :- nl,!.
画面に出力([A|R]) :-
        write_formatted('%t '\n',[A]),
        画面に出力(R).