Prologで3次元ベクトルを扱うことを考えています。
Prologに大域変数はないので次のようにやってみました。
Prologでベクトル、行列を扱う場合の定石がありましたら教えてください。

v(a,[2,3,1]). v(b,[3,5,2]).

vec_eq(X,Y) :- v(X,V),v(Y,V).
inner_product(X,Y,Z) :- v(X,[X1,X2,X3]),v(Y,[Y1,Y2,Y3]),Z is X1*Y1+X2*Y2+X3*Y3.
outer_product(X,Y,[Z1,Z2,Z3]) :- v(X,[X1,X2,X3]),v(Y,[Y1,Y2,Y3]),
Z1 is X2*Y3-X3*Y2,
Z2 is -(X1*Y3-X3*Y1),
Z3 is X1*Y2-X2*Y1.