В качестве отступления: при заданном вами определении рассмотрим, например, непредвиденное второе решение в:
?- replace(1, 4, [1,2,3], Ls).
Ls = [4, 2, 3] ;
Ls = [1, 2, 3] ;
false.
Что касается самого вопроса, рассмотрим:
replace(A, B, X, Y) :- ( X == A -> Y = B ; Y = X ).
Пример запроса:
?- maplist(replace(1,4), [1,2,3], Ls).
Ls = [4, 2, 3].
Для логическая чистота , я рекомендую действительно реляционную версию, которая может использоваться во всех направлениях:
replacement(A, B, A, B).
replacement(A, _, X, X) :- dif(A, X).
Пример:
?- maplist(replacement(a,b), [X], Rs).
Rs = [b],
X = a ;
Rs = [X],
dif(X, a).