このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/681
#  [1] 授業単元:C言語プログラミング 
#  [2] 問題文(含コード&リンク): 
#  N×Nの行列を入力させ、その転置行列を出力するプログラムを作成せよ. 
#  ただしNはプログラム内で記号定数として定義し,ここでは3とすること.転置行列とは、行と列を入れ替えた行列である. 
#  実行した時↓ 
#  $ ./kadai 
#  3 x 3 matrix: 
#  Row 1? 1 4 5 
#  Row 2? 10 8 9 
#  Row 3? 7 2 11 
#  Transposed matrix: 
#  1 10  7 
#  4  8  2 
#  5  9 11 
#   
#  

'N×N'(3).

'N×Nの行列を入力させ、その転置行列を出力するプログラムを作成せよ.ただしNはプログラム内で記号定数として定義し,ここでは3とすること.転置行列とは、行と列を入れ替えた行列である. ' :-
        'N×Nの行列を入力させ'(_行列),
        'N×Nの行列の転置行列を'(_行列,_転置行列),
        出力する(_転置行列).

'N×Nの行列を入力させ'(_行列) :-
        'N×N'(_N)
        length(_行列,_N),
        findall(L,(
                    append(_,[L|_],_行列),
                    length(L,_N),
                    入力する(L)),
                _行列).

入力する(_N,L) :-
        writef('%t要素の値をカンマ区切りで入力してください : ',[_N]),
        readln(L),!.
入力する(_N,L) :-
        writef('適切な%t項目の値が得られませんでした。再入力をお願いします。\n',[_N]),
        入力する(_N,L).

'N×Nの行列の転置行列を'(_行列,_転置行列) :-
        'N×N'(_N),
        'N×Nの行列の転置行列を'(1,_N,_行列,_転置行列).

'N×Nの行列の転置行列を'(M,_N,_,[]) :-
        M > _N,!.
'N×Nの行列の転置行列を'(M,_N,_行列,[L|R]) :-
        findall(E,(
                    append(_,[L|_],_行列),
                    nth1(M,L,E)),
                L),
        M2 is M + 1,
        'N×Nの行列の転置行列を'(M,_N,_行列,R).

出力する(_転置行列) :-
        append(_,[L|R1],_転置行列),
        append(_,[E|R2],L),
        writef('%5r,',[E]),
        R2 = [E2],
        writef('%5r\n',[E2]),
        R1 = [].