このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1349527750/127
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク):http://ime.nu/codepad.org/YK6POzO6 
#  
#  値を入力し、最小値と最大値を求める。
#  ただしマイナスの値が入力されたら結果を表示する。
#  
#  [実行例]
#  値1:50
#  値2:32
#  値3:102
#  値4:2
#  値5:99
#  値6:-2
#  
#  //最大値の右にmax、最小値の右にminと出力する。//
#  1: 50
#  2: 32
#  3:102  max
#  4:  2  min
#  5: 99
#  

'値を入力し、最小値と最大値を求める。ただしマイナスの値が入力されたら結果を表示する。' :-
        findall(_値,(
                        '値を入力し、'(_値),
                        (    マイナスの値が入力されたら(_値),!,
                             fail;
                             true)),
                _値ならび),
        '入力した値をmin(最小値),max(最大値)を付加して表示する。'(_値ならび).

'値を入力し、'(_値) :-
        append(L0,_,_),
        length([_|L0],_何番目),
        atomic_list_concat([値,_何番目],_催促表示),
        数を得る(_催促表示,_値).

'入力した値をmin(最小値),max(最大値)を付加して表示する。'(_値ならび) :-
        最大値(_値ならび,_最大値),
        最小値(_値ならび,_最小値),
        全ての行を表示する(_値ならび,_最小値,_最大値).

全ての行を表示する(_値ならび,_最小値,_最大値) :-
        append(L0,[_値|R],_値ならび),
        length([_|L0],_何番目),
        行表示文字列を生成(_何番目,_値,_最小値,_最大値,_行表示文字列),
        writef('%t\n',[_行表示文字列]),
        R = [],!.

行表示文字列を生成(_何番目,_値,_最小値,_最大値,_行表示文字列) :-
        atomic_list_concat([_何番目,':',_値],_行表示_1),
        最小値ならminを付加(_値,_最小値,_行表示_1,_行表示_2),
        最大値ならmaxを付加(_値,_最大値,_行表示_2,_行表示文字列).

最小値ならminを付加(_最小値,_最小値,_行表示_1,_行表示_2) :-
        atomic_list_concat([_行表示_1,'   min'],_行表示_2),!.
最小値ならminを付加(_,_,_行表示,_行表示).

最大値ならminを付加(_最大値,_最大値,_行表示_1,_行表示_2) :-
        atomic_list_concat([_行表示_1,'   max'],_行表示_2),!.
最大値ならminを付加(_,_,_行表示,_行表示).

マイナスの値が入力されたら(V) :-
        integer(V),
        V < 0,!.
マイナスの値が入力されたら(V) :-
        float(V),
        V < 0.0,!.