Sustitución de prólogos

¿Cómo puedo reemplazar una lista con otra lista que contenga la variable que se va a reemplazar? por ejemplo

rep([x, d, e, z, x, z, p], [x=z, z=x, d=c], R).
R = [z, c, e, x, z, x, p]

La x a la z y la z no cambia después de que se haya reemplazado.

Hasta ahora solo hice el que no tiene la lista

rep([], _, []).
rep(L1, H1=H2, L2) :-
   rep(L1, H1, H2, L2).

rep([],_,_,[]).
rep([H|T], X1, X2, [X2|L]) :-
   H=X1,
   rep(T,X1,X2,L),
   !.
rep([H|T],X1,X2,[H|L]) :-
   rep(T,X1,X2,L).

Respuestas a la pregunta(6)

Su respuesta a la pregunta