このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1305867431/894
#  [1] 授業単元: Cプログラミング1 
#  [2] 問題文:2つの n 次元ベクトル a,b の内積を求めるプログラムを作成せよ。尚、n の個数は未定であるので、動的メモリを利用せよ。 
#  (入力例) 
#  何個入力しますか? : 5 
#  a input num[0] : 12.3 
#  a input num[1] : 5.6 
#  a input num[2] : 7.89 
#  a input num[3] : 9.51 
#  a input num[4] : 62.7 
#  b input num[0] : 0.12 
#  b input num[1] : 34.56 
#  b input num[2] : 7.89 
#  b input num[3] : 75.3 
#  b input num[4] : 86.1 
#  (出力) 
#  inner product : 6371.837100 
#   
#  

'2つの n 次元ベクトル a,b の内積を求める' :-
        'n 次元ベクトルを得る'(_n),
        '2つの n 次元ベクトル a,b を入力する'(_n,_a,_b),
        ベクトルの内積(_a,_b,_内積),
        内積を表示する(a,_a,b,_b,_内積).


'n 次元ベクトルを得る'(_n) :-
        write('何次元のベクトルを入力しますか? : '),
        get_integer(_n),!.

'2つの n 次元ベクトル a,b を入力する'(_n,_a,_b) :-
        'n 次元ベクトルを入力する'(_n,a,_a),
        'n 次元ベクトルを入力する'(_n,b,_b),!.

'n 次元ベクトルを入力する'(_n,_ベクトル名,_ベクトル) :-
        length(_ベクトル,_n),
        writef('%t次元ベクトル%tの入力 ',[_n,_ベクトル名]),
        findall([V],(
                    append(L0,[_|_],_ベクトル),
                    length([_|L0],Nth),
                    値の入力(Nth,_n,V)),
                _ベクトル),!.

値の入力(Nth,_n,V) :-
        writef('[%t-%t] : ',[Nth,_n]),
        get_line(Line),
        値の入力診断(Line,V),!.
値の入力(Nth,_n,V) :- 値の入力(Nth,_n,V).

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

ベクトルの内積([],[],0) :- !.
ベクトルの内積([[A]|R1],[[B]|R2],X) :-
        ベクトルの内積(R1,R2,Y),
        X is Y + A * B.

内積を表示する(a,_a,b,_b,_内積) :-
        writef('ベクトル%t %t と ベクトル%t %t の内積は %t です\n',[a,_a,b,_b,_内積]).