このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/969
#  5を入力するまで数字を入力し 
#   
#  入力されたら 
#  その数列の最大値と最小値の場所を入れ替えて左から表示するプログラムを教えてください 
# 
# 

'5を入力するまで数字を入力し入力されたらその数列の最大値と最小値の場所を入れ替えて左から表示する' :-
        '5を入力するまで数字を入力し'(_数列),
        '最大値と最小値の場所を入れ替えて左から表示する'(_数列).

'5を入力するまで数字を入力し'(_数列) :-
        write('数字を入力して下さい(5が入ったら終わります) : '),
        rawmode,
        数字の入力(_数字),
        '5を入力するまで数字を入力し'(_数字,_数列),
        norawmode.

'5を入力するまで数字を入力し'('5',[]) :- !.
'5を入力するまで数字を入力し'(_数字,[_数字|R]) :-
        数字の入力(_数字2),
        '5を入力するまで数字を入力し'(_数字2,R),!.
'5を入力するまで数字を入力し'(_,R) :-
        数字の入力(_数字),
        '5を入力するまで数字を入力し'(_数字,R).

数字の入力(_数字) :-
        get_char(_数字),
        _数字 @>= '0',
        _数字 @=< '9'.

'最大値と最小値の場所を入れ替えて左から表示する'(_数列) :-
        最大値と最小値の(_数列,_最大値,_最小値),
        場所を入れ替えて(_数列,_最大値,_最小値,_最大値と最小値を入れ替えた数列),
        左から表示する(_最大値と最小値を入れ替えた数列).

最大値と最小値の(_数列,_最大値,_最小値) :-
        最大値(_数列,_最大値),
        最小値(_数列,_最小値).

最大値(_数列,_最大値) :-
        append(L1,[_最大値|R1],_数列),
        \+((member(A1,L1),A1 @> _最大値)),
        \+((member(A2,R1),A2 @> _最大値)),!.

最小値(_数列,_最小値) :-
        append(L2,[_最小値|R2],_数列),
        \+((member(B1,L2),B1 @< _最小値)),
        \+((member(B2,R2),B2 @< _最小値)),!.

場所を入れ替えて(_数列,_最大値,_最小値,_数列2) :-
        append(L1,[_最大値|R1],[_最小値|R2],_数列),
        append(L1,[_最小値|R1],[_最大値|R2],_数列2),!.
場所を入れ替えて(_数列,_最大値,_最小値,_数列2) :-
        append(L1,[_最小値|R1],[_最大値|R2],_数列),
        append(L1,[_最大値|R1],[_最小値|R2],_数列2),!.

左から表示する([]) :-
        write('\n').
左から表示する([A|R]) :-
        writef('%t ',[A]),
        左から表示する(R).

rawmode :-
        shell('stty raw').

norawmode :-
        shell('stty -raw').