このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1339338438/413
#  [1] 授業単元: C言語  
#  [2] 問題文:http://ime.nu/codepad.org/je2akZ6u 
#  #include
#  
#  int main(){
#          int num[100];
#          int data, i, j;
#          FILE* FP;
#  
#          //データの個数を入力
#          printf("データの個数を入力してください。");
#          scanf("%d", &data);
#  
#          //読み込み
#          FP = fopen("readFile.txt","r");
#  
#          for(i=0; i&nplt;dat&npgta; i++){
#                  fscanf(FP,"%d", &num[i]);
#          }
#          fclose(FP);
#  
#          //書き込み
#          FP = fopen("writeFile.txt","w");
#          for(i=0; i&nplt;data; i++){
#                  fprintf(FP,"%d ", num[i]);
#          }
#          fclose(FP);
#          return(0);
#  }
#  writeFile.txtの表示を 
#    11  22  33  44  55 
#    66  77  88  99 00 
#  にするにはどうすればいい? 
#  

'データの個数を入力し、readFile.txtを読み、昇順にデータを並べ替えて、writeFile.txtに一行5データずつ出力する' :-
        'まずデータの個数を入力し'(_データの個数),
        'readFile.txtを読み'(_データの個数,_データならび),
        '昇順にデータを並べ替えて'(_データならび,_昇順に整列したデータならび),
        'ファイルwriteFile.txtに5データ毎に改行して書き込む'(_昇順に整列したデータならび).

'まずデータの個数を入力し'(_学生の人数) :-
        整数を得る(データの個数,_データの個数).

'readFile.txtを読み'(_データの個数,_データならび) :-
        get_split_lines('readFile.txt',[' '],LL),
        平坦化(LL,_データならび_1),
        データの個数分を切り取る(_データの個数,_データならび_1,_データならび).

データの個数分を切り取る(_データの個数,_データならび_1,_データならび) :-
        length(_データならび_1,_要素数),
        _要素数 >= _データの個数,
        length(_データならび,_データの個数),
        append(_データならび,_,_データならび_1),!.
データの個数分を切り取る(_,_データならび,_データならび).

'昇順にデータを並べ替えて'(_データならび,_昇順に整列したデータならび) :-
        整列(_データならび,_昇順に整列したデータならび).

整列([],[]).
整列([_軸要素|_着目した科目の成績ならび],_昇順に整列した着目した科目の成績ならび) :-
        分割(_軸要素,_着目した科目の成績ならび,_軸要素より小さい成績ならび,_軸要素と等しいか大きい成績ならび),
        整列(_軸要素より小さい成績ならび,_整列した軸要素より小さい成績ならび),
        整列(_軸要素より大きい成績ならび,_整列した軸要素より大きい成績ならび),
        append(_整列した軸要素より小さい成績ならび,[_軸要素|_整列した軸要素より大きい成績ならび],_昇順に整列した着目した科目の成績ならび).

分割(_,[],[],[]).
分割(_軸要素,[[_成績,_No]|R1],[[_成績,_No]|_軸要素より小さい成績ならび],_軸要素と等しいか大きい成績ならび) :-
        _成績 @<_軸要素,
        分割(_軸要素,R1,_軸要素より小さい成績ならび,_軸要素と等しいか大きい成績ならび).
分割(_軸要素,[[_成績,_No]|R1],_軸要素より小さい成績ならび,[[_成績,_No]|_軸要素と等しいか大きい成績ならび]) :-
        _成績 @>= _軸要素,
        分割(_軸要素,R1,_軸要素より小さい成績ならび,_軸要素と等しいか大きい成績ならび).

'ファイルwriteFile.txtに5データ毎に改行して書き込む'(_整列した得点ならび) :-
        '得点ならびを頭部零文字列ならびに変換'(_整列した得点ならび,_頭部零文字列ならび),
        open('writeFile.txt',write,Outstream),
        'Outstreamに書き込む'(Outstream,_頭部零文字列ならび),
        close(Outstream).

'5データ毎にOutstreamに書き込む'(_,[]) :- !.
'5データ毎にOutstreamに書き込む'(Outstream,_頭部零文字列ならび) :-
        '5データ毎に'(_得点ならび,A,B,C,D,E,_残りならび),        
        writef(Outstream,'%t  %t  %t  %t  %t\n',[A,B,C,D,E]),
        '5データ毎にOutstreamに書き込む'(Outstream,_残りならび).

'5データ毎に'([A,B,C,D,E|_残りならび],A,B,C,D,E,_残りならび) :- !.
'5データ毎に'(_得点ならび,A,B,C,D,E,[]) :-
        append(_得点ならび,L1,[A,B,C,D,E]),
        all(L1,'00').

'得点ならびを頭部零文字列ならびに変換'([],[]) :- !.
'得点ならびを頭部零文字列ならびに変換'([N|R1],[A|R2]) :-
        頭部零文字列(2,N,A),
        '得点ならびを頭部零文字列ならびに変換'(R1,R2).

頭部零文字列(_N桁,_整数,_頭部零文字列) :-
        length(L,_N桁),
        number_chars(_整数,Chars),
        append(L0,Chars,L),
        all(L0,'0'),
        atomic_list_concat(L,_頭部零文字列),!.
頭部零文字列(_N桁,_整数,_頭部零文字列) :-
        number_chars(_整数,Chars),
        atomic_list_concat(Chars,_頭部零文字列).


%  平坦化/2
%  ここでは使っていない'N個組'/2