このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1274827528/904
#  期限6月21日18時 
#  よろしくお願いします。 
#   
#  3次元の実数ベクトルを、要素がfloat型で要素数3の配列を用いて表すものとする。 
#  二つの3次元ベクトルに対して、それらの和、差、内積、外積を求める関数を定義する。 
#  和、差、内積、外積を計算する関数はそれぞれaddvec、subvec、innervec、outervecとし、 
#  それぞれの関数定義の頭部は 
#  void addvec(const float x[3], const float y[3], float z[3]) 
#  void subvec(const float x[3], const float y[3], float z[3]) 
#  float innervec(const float x[3], const float y[3]) 
#  void outervec(const float x[3], const float y[3], float z[3]) 
#  とする。 
#  プログラムの動作は、二つの3次元ベクトルaとbの各成分をじゅんじに入力して、それらの和、差、内積、外積を求めて出力する。 
#  以上の説明に沿ったプログラムをC言語を用いて書け。 
#   
# 
# 

'二つの3次元ベクトルaとbの各成分をじゅんじに入力して、それらの和、差、内積、外積を求めて出力する' :-
        write('入力してください X1,Y1,Z1 : '),get_split_line([','],[X1,Y1,Z1]),
        write('入力してください X2,Y2,Z2 : '),get_split_line([','],[X2,Y2,Z2]),
        ベクトルの和([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの和),
        ベクトルの差([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの差),
        ベクトルの内積([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの内積),
        ベクトルの外積([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの外積),
        write_formatted('和は %t \n差は %t \n内積は %t \n外積は %t です\n').

ベクトルの和([],[],[]) :- !.
ベクトルの和([[A]|R1],[[B]|R2],[[C]|R3]) :-
        C is A + B,
        ベクトルの和(R1,R2,R3).

ベクトルの差([],[],[]) :- !.
ベクトルの差([[A]|R1],[[B]|R2],[[C]|R3]) :-
        C is A - B,
        ベクトルの差(R1,R2,R3).

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

innervec([],[],0) :- !.
innervec([A|R1],[B|R2],Inner) :-
        innervec(R1,R2,Inner2),
        Inner is Inner2 + A * B,!.

ベクトルの外積([[X1],[Y1],[Z1]],[[X2],[Y2],[Z2]],_ベクトルの外積) :-
        X3 is Y1 * Z2 - Z1 * Y2,
        Y3 is Z1 * X2 - X1 * Z2,
        Z3 is X1 * Y2 - Y1 * X2,
        _ベクトルの外積 = [[X3],[Y3],[Z3]],!.