このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1335517816/937
#  [1] 授業単元: コンピュータプログラミング  
#  [2] 問題文(含コード&リンク): 
#  2つの多次元ベクトルX,Yの和を出力する関数を作りたい。 
#  X={x1, x2, ..., xN}, Y={y1, y2, ...,yN}でこの二つの配列の値の和をポインターとして 
#  出力する関数 int  *add(int *address1, int * address2, int length)を定義し、 
#  その動作を確認するプログラムkadai7-1.cを作りなさい。ただしlengthは2つの配列の長さを表すものとする。 
#  ただし、 
#   int a[2], b[2]; 
#   scanf("%d %d %d %d", &(a[0]), &(a[1]),&(b[0]),&(b[1])); 
#   で配列の値をセットするものとして、答えは以下で出力されるものとする。 
#  printf("c = %d %d\n", c[0], c[1]);  
#  

'2つの多次元ベクトルX,Yの和を出力する関数'([],[],[]).
'2つの多次元ベクトルX,Yの和を出力する関数'([[_X_1]|R1],[[_Y_1]|R2],[[_Z_1]|R3]) :-
        _Z_1 is _X_1 + _Y_1,
        '2つの多次元ベクトルX,Yの和を出力する関数'(R1,R2,R3).

ベクトルを読み取る(_n次元,_ベクトル) :-
        length(_ベクトル,_n次元),
        findall([_数値],(
                    append(_,[_|_],_ベクトル),
                    get_number(_数値)),
                _ベクトル).

get_number(_数値) :-
        get_line(Line),
        get_number_診断(Line,_数値),!.
get_number(_数値) :-
        get_number(_数値).

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

数値か(_分子/_分母) :-
        integer(_分子),
        integer(_分母),!.
数値か(_数値) :-
        number(_数値).