Я хочу создать replace / 4 (replace (X, Y, MyList, ReplacedList)) и изменить первый X в MyList на Y, а затем изменить только следующий X и так далее.
Это пример вывода, который я хочу получить:
?- replace(1,a,[1,2,1,1,3],R).
R = [a, 2, 1, 1, 3] ;
R = [1, 2, a, 1, 3] ;
R = [1, 2, 1, a, 3] ;
No
и это код, который я написал до сих пор
replace(_, _, [], []).
replace(X, Y, [X|Tail], [Y|Tail2]):-
replace(X, X, Tail, Tail2).
replace(X, Y, [Head|Tail], [Head|Tail2]):-
replace(X, Y, Tail, Tail2).
Пока я получаю каждый вывод что мне нужно, я действительно повторяю некоторые из них, и я не понимаю, почему. Выходные данные, которые я получаю, равны
?- replace(1,a,[1,2,1,1,3],R).
R = [a, 2, 1, 1, 3]
R = [a, 2, 1, 1, 3]
R = [a, 2, 1, 1, 3]
R = [a, 2, 1, 1, 3]
R = [1, 2, a, 1, 3]
R = [1, 2, a, 1, 3]
R = [1, 2, 1, a, 3]
R = [1, 2, 1, 1, 3]
Каждый повторяющийся вывод отображается столько раз, сколько предметов в хвосте после замененного символа. Это единственная подсказка, которую я имею до сих пор.