Позвольте мне предположить, что вы хотите заменить подстроку подпоследовательности в списке другим списком.
Вот общий способ, как это сделать. Возможно, вы захотите вставить дополнительные условия в программу.
replacement(A, B, Ag, Bg) :-
phrase((seq(S1),seq(A),seq(S2)), Ag),
phrase((seq(S1),seq(B),seq(S2)), Bg).
seq([]) --> [].
seq([E|Es]) --> [E], seq(Es).
И да, это может быть оптимизировано немного - даже его свойство завершения будет полезно. Но концептуальная ясность - довольно ценная ценность ...
Редактирование: ваш пример запроса:
?- replacement([2,3], [5,6], [1,2,3,4], Xs).
Xs = [1, 5, 6, 4] ;
false.