このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1263824755/124
# [1] 授業単元: Cプログラミング入門
# [2] 問題文(含コード&リンク): 入力された2つの文字列(日本語その他バイト文字は不可)
# を比較するプログラムを作成せよ。ただし、大文字小文字の違いは無視。単語間に連続して
# スペース・タブが複数入っていても単独のスペースとしない。
#
# [5] その他の制限: 文字列とポインタまでやってます。
# 入力に関して、キーボードから1つ目の文字列を1行で入力し、改行する。
# この時、入力を促す文字は一切表示しない。入力文字数は128文字まで。
# 出力に関して、一致すれば何も表示しない。不一致の場合は最初に不一致となる
# 入力1の文字と入力2の文字(1文字+スペース+1文字+改行)を表示する。
# どちらかが末端の場合は代わりにスペースで埋める。 

複数の整数を平均値に近い順にソートする(_整数ならび,_平均値に近い順に整列された整数ならび) :- 
    'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力する整数の個数), 
    指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数ならび), 
    相加平均(_整数ならび,_平均値の一), 
    _平均値 is truncate(_平均値の一), 
    平均値からの隔たりによる整列(_平均値からの隔たりのならび,_平均値,_平均値からの隔たりを鍵として付加して整列された整数ならび), 
    整列した整数をスペース1つのみあけて1行で出力する(_平均値からの隔たりを鍵として付加して整列された整数ならび). 

'キーボードからまず、入力する整数の個数を入力(最大で100とする)し、改行'(_入力する整数の個数) :- 
    repeat, 
    get_integer(_入力する整数の個数), 
    _入力する整数の個数 =< 100,!. 

指定した数の整数をスペース1つ開けて1行で入力する(_入力する整数の個数,_整数ならび) :- 
    length(_整数ならび,_入力する整数の個数), 
    get_split_line([' '],_整数ならび). 

平均値からの隔たりによる整列([X|Xs],_平均値,Ys) :- 
    U is X - _平均値, 
    平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Littles,Bigs), 
    平均値からの隔たりによる整列(Littles,_平均値,Ls), 
    平均値からの隔たりによる整列(Bigs,_平均値,Bs), 
    append(Ls,[X|Bs],Ys) . 
平均値からの隔たりによる整列([],_,[]). 

平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :- 
    V is X - _平均値, 
    V < U, 
    平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!. 
平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,[[U,X]|Ls],Bs) :- 
    U is X - _平均値, 
    X < Y, 
    平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs),!. 
平均値からの隔たりにより分割する([X|Xs],U,Y,_平均値,Ls,[[U,X]|Bs]) :- 
    平均値からの隔たりにより分割する(Xs,U,Y,_平均値,Ls,Bs) . 
平均値からの隔たりにより分割する([],Y,_,[],[]). 

整列した整数をスペース1つのみあけて1行で出力する([]) :- !. 
整列した整数をスペース1つのみあけて1行で出力する([[A,B]]) :- write_formatted('%t\n',[A]) :- !. 
整列した整数をスペース1つのみあけて1行で出力する([[B,A]|R]) :- 
    write_formatted('%t ',[A]), 
    整列した整数をスペース1つのみあけて1行で出力する(R)