このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1342966104/63
#  [1] 授業単元:C言語 
#  [2] 問題文(含コード&リンク): 
#  http://ime.nu/s2.muryo-de.mydns.jp/~c_cpp_homework/cgi-bin/joyful/img/371.txt 
#  #include
#  int main(){
#  	int a[4][3]={
#  		{3,5,3},
#  		{4,3,5},
#  		{2,2,3},
#  		{1,8,7}
#  	};
#  	
#   	int b[4],x,y;
#  
#  	for(y=0;y<=3;y++){
#  		b[y]=0;
#  		for(x=0;x<=2;x++){
#  			b[y] += a[y][x];
#  		}
#  	}
#  
#  	for(y=0;y<=3;y++){
#  		printf("%d\n",b[y]);
#  	}
#  }
#  上のコードは、配列a[4][3]の各行の合計を求め、配列b[4]に保存し、求めた値を出力するプログラムです。 
#  これを改造して次のプログラムを作成せよ。 
#   
#  ・配列a[4][3]の各行において、その合計の昇順に行を並び替え、配列 c[4][3]に保存し、出力しなさい。 
#  ただし、各行の合計の値が等しいものがあった場合、行番号が小さいものを小さい順番にする。 
#   
#  

'行列の各行において、その合計の昇順に行を並び替え、出力しなさい。ただし、各行の合計の値が等しいものがあった場合、行番号が小さいものを小さい順番にする。'(_行列,_行合計で整列した行列) :-
        'その合計の昇順に行を並び替え'(_行列,_行合計で整列した行列),
        出力しなさい(_行合計で整列した行列).

'その合計の昇順に行を並び替え'(_行列,_行合計で整列した行列) :-
        findsort([_行合計,_行番号],(
                    nth1(_行番号,_行列,_行),
                    sum(_行,_行合計)),
                _行合計で整列した行列).

出力しなさい(_行合計で整列した行列) :-
        表示形式文字列の生成(_行合計で整列した行列,_表示形式文字列),
        append(_,[[_行合計,_行番号]|_残り行],_行合計で整列した行列),
        nth1(_行番号,_行列,_行),
        writef(_表示形式文字列,_行),
        _残り行 = [].

表示形式文字列の生成(_行合計で整列した行列,_表示形式文字列) :-
        nth1(1,_行合計で整列した行列,_行),
        length(_行,_列数),
        findall('%t',between(1,_列数,_),L),
        atomic_list_concat(L,',',S),
        atomic_list_concat(['| ',S,' |\n'],_表示形式文字列).

findsort(_射影項,_目標,_整列した射影項ならび) :-
        findall(_射影項,_目標,_射影項ならび),
        sort(_射影項ならび,_整列した射影項ならび).