このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/384
#   
#  [1] 授業単元:2次元配列の利用 
#  [2] 問題文(含コード&リンク): 
#  新幹線「のぞみ」の料金(ただし運賃との合計額)は以下の表の通りである。出発駅と到着駅をそれぞれ駅番号で入力し、料金を表示するプログラムを作成しなさい。 
#  なお、駅番号は、東京が1、新横浜が2、名古屋が3、京都が4、新大阪が5とする。 
#  但し、料金を表示してから後で、1を入力すると上記の処理を繰り返し、0を入力するとプログラムを終了するものとする。 
#      新大阪 京都  名古屋 新横浜 
#  東京  14920 14390 11540  3180 
#  新横浜 14600 13660 10910 
#  名古屋 6840 6100 
#  京都  3240 
#  

のぞみ料金表の作成(File) :-
        get_split_lines(File,[' '],Lines),
        Lines = [_駅名横ならび|R1],
        findall(_駅名,(
                    append(LL0,[[_駅名|_]|R],R1)),
                _駅名縦ならび),
        駅番号の登録(_駅名縦ならび),
        findall(_料金ならび,(
                    append(LL0,[[_|_料金ならび]|_],R1)),
                _料金表),
        のぞみ料金表の作成(_駅名縦ならび,_駅名横ならび,_料金表).

駅番号の登録(_駅名縦ならび) :-
        append(_駅名縦ならび,[新大阪],_駅名縦ならびのニ),
        append(L0,[_駅名|R],_駅名縦ならびのニ),
        length([_|L0],Len),
        assertz((駅番号(Len,_駅名) :- !)),
        R = [].

のぞみ料金表の作成([],_,_) :- !.
のぞみ料金表の作成([_駅名|R1],_駅名横ならび,[L3|R3]) :-
        駅単位料金表(_駅名,_駅名横ならび,L3),
        のぞみ料金表の作成(R1,_駅名横ならび,R3).

起点駅単位料金登録(_,_,[]) :- !.
起点駅単位料金登録(_駅名,[_駅名2|R2],[_料金|R3]) :-
        assertz(のぞみ料金(_駅名,_駅名2,_料金)),
        assertz(のぞみ料金(_駅名2,_駅名,_料金)),
        起点駅単位料金表(_駅名,R2,R3).