このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/588
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク):  
#  3x4 の行列を二次元配列で定義し, 行列の指定した行の和を計算するプログラムを作成せよ.  
#  ただし, 一つの行の合計は, 行の先頭を指す整数型のポインタ a と列数をあらわす整数 n を受け取り, 一行の合計を返す 関数 int row_sum( int* a, int n ) を作成し計算せよ. (関数の引数と返り値の型を指定されたもので作ること) 
#   
#  

'3x4 の行列を二次元配列で定義し, 行列の指定した行の和を計算する'(_指定した行位置,_行の和) :-
        '3x4 の行列を二次元配列で定義し',
        '3x4 の行列'(_行列),
        '3x4 の行列を二次元配列で定義し, 行列の指定した行の和を計算する'(_行列,_指定した行位置,_行の和).

'行列の指定した行の和を計算する'(_行列,_指定した行位置,_行の和) :-
        nth1(_指定した行位置,_行列,_指定した行),
        sum(_指定した行,_行の和).



'3x4 の行列を二次元配列で定義し' :-
        length(LL,3),
        findall(L,(
                    append(L0,[L|_],LL),
                    length([_|L0],_行位置),
                    length(L,4),
                    列を埋める(_行位置,L)),
                LL),
        assertz('3x4 の行列'(LL)).

列を埋める(_行位置,L) :-
        findall(_値,(
                    append(L0,[_値|_],L),
                    length([_|L0],_列位置),
                    整数入力(_行位置,_列位置,_値)),
                L).

整数入力(_行位置,_列位置,_値) :-
        writef('[%t][%t]: ',[_行位置,_列位置]),
        get_line(Line),
        整数入力検査(Line,_値),!.
整数入力(_行位置,_列位置,_値) :-
        整数入力(_行位置,_列位置,_値).

整数入力検査(Line,_値) :-
        atom_to_term(Line,_値,_),
        integer(_値),!.        
整数入力検査(Line,_値) :-
        writef('入力された%tからは数値が得られません。再入力をお願いします。\n',[Line]),
        fail.

sum([],0).
sum([V|R],S) :-
        sum(R,S2),
        S is V + S2.