Как насчет терминов, которые выглядят как
point(X,Y,Z)
, где X, Y, Z - числа (числа с плавающей запятой, целые числа, рациональные числа, ...).
Тогда вы можете думать как :
:- use_module(library(clpfd)).
% move(PointIn,PointOut,Vector)
move(point(X,Y,Z),point(NX,NY,NZ),point(VX,VY,VZ)) :-
NX #= X + VX,
NY #= Y + VY,
NZ #= Z + VZ.
Тогда:
?- move(point(1,2,3),New,point(5,5,5)).
New = point(6, 7, 8).