このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/481
#   
#  [1] 授業単元:プログラミング 
#  [2] 問題文(含コード&リンク):(1,10,5) (1,20,10)...というテキストデータを読み込み、一番左の数字(ここでいう1と1)を一つの配列として表示と書きこみをするプログラム。(真ん中も右の数字も同じように処理する) 
#   [3.1] OS: (Windows/Linux/等々) Linux 
#   [3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等) gcc 
#   [3.3] 言語: (C/C++/どちらでも可 のいずれか) c言語 
#  [4] 期限: ([yyyy年mm月dd日hh:mmまで] または [無期限] のいずれか) 11月23日 15時 
#  [5] その他の制限: (どこまで習っているか、標準ライブラリは使ってはいけない等々) 何でもおk 
# 
# 

'(1,10,5) (1,20,10)...というテキストデータを読み込み、一番左の数字(ここでいう1と1)を一つのならびとして表示と書きこみをする'(_何列目) :-
        get_line(_テキスト),
        '各構造の一番左の数字(ここでいう1と1)を一つのならびとして'(_テキスト,_括弧内の列で並べ直した行列),
        括弧内の列で並べ直した行列を書きだす(_括弧内の列で並べ直した行列),
        列データを順に表示する(_何列目,_括弧内の列で並べ直した行列).

括弧内の列で並べ直した行列を書きだす(_何列目,_括弧内の列で並べ直した行列) :-
        assertz(括弧内の列で並べ直した行列(_何列目,_括弧内の列で並べ直した行列)).

列データを順に表示する(_何列目,_括弧内の列で並べ直した行列) :-
        append(L0,[_ならび|_],_括弧内の列で並べ直した行列),
        length([_|L0],_何列目),
        writef('%t: %t\n',[_何列目,_ならび]).

'一番左の数字(ここでいう1と1)を一つのならびとして'(_テキスト,_括弧内の列で並べ直した行列) :-
        括弧構造を行列に変換(_テキスト,_行列),
        転置(_行列,_括弧内の列で並べ直した行列).

括弧構造を行列に変換(_テキスト,_行列) :-
        split(_テキスト,['(',')'],L),
        findall(L1,(
                    append(_,[S|_],L),
                    split(S,[','],L1)),
                LL).

転置([],[],[]) :- !.
転置([[A|R1]|R2],[R1|R3],[A|R4]) :-
        転置(R2,R3,R4).

転置([[]|_],[]) :- !.
転置(L,[L1|R2]) :-
        転置(L,L2,L1),
        転置(L2,R2).