Minimizing Data Movement Between Registers

Data movement between registers for parameter passing may be minimized by leaving variables in the same argument position wherever possible. Thus, the clause

p(X,Y) :- p1(X,Y,0).
is preferable to
p(X,Y) :- p1(0,X,Y).
because the first definition leaves the variables X and Y in the same argument positions (first and second, respectively), while the second definition does not.