このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/725
#  [1] 授業単元:プログラミング  
#  [2] 問題文(含コード&リンク): 
#  int型の二つの同じ長さを持つ配列があるとする。 
#  この二つの配列の値の和を一方の配列に代入する関数  
#  void add(int *address1, int * address2, int length)を定義し、 
#  その動作を確認するプログラムkadai7-1.cを作りなさい。 
#  ただし、答えはaddress1で指定された配列に代入されるものとし、 
#  lengthは2つの配列の長さを表すものとする。 
#  ただし、int a[2], b[2]; 
#  scanf("%d %d %d %d", &(a[0]), &(a[1]),&(b[0]),&(b[1])); 
#  で配列の値をセットするものとして、答えは以下で出力されるものとする。 
#  printf("a = %d %d, b = %d %d\n", a[0], a[1], b[0], b[1])  
#  

二つの配列の値の和を一方の配列に代入する :-
        address1(L1),
        address2(L2),
        二つのならびの加算(L1,L2,L3),
        retract(address2(_)),
        assertz(address2(L3)).

二つの数値からなるならびを生成しそれぞれ述語address1とasseress2の引数として登録する :-
        ならびの長さを決める(_ならびの長さ),
        length(L1,_ならびの長さ),
        length(L2,_ならびの長さ),
        ならびに値を詰める(L1),
        ならびに値を詰める(L2),
        assertz(address1(L1)),
        assertz(address2(L2)),!.

ならびの長さを決める(_ならびの長さ) :-
        _ならびの長さ is random mod 98 + 2.

ならびに値を詰める([]) :- !.
ならびに値を詰める([V|R]) :-
        V is random(9999),
        ならびに値を詰める(R).