Представьте, что у нас есть список: [1,2,2,3,4]
. Проблема может быть разделена на две части:
- Перевернуть список (мы должны получить
[4,3,2,2,1]
)
- Заменить, например, все
2
с 100
, поэтому мы должны получить [4,3,100,100,1]
Список легко перевернуть, вот рабочий код:
simple_reverse(List, Rev) :-
simple_reverse(List, Rev, []).
simple_reverse([], L, L).
simple_reverse([H|T], L, SoFar) :-
simple_reverse(T, L, [H|SoFar]).
Но у меня есть некоторые проблемы с заменой элементов. Я попробовал следующий подход:
reverse(a, b, List, Rev) :-
reverse(a, b, List, Rev, []).
reverse(a, b, [], L, L).
reverse(a, b, [H|T], L, SoFar) :-
reverse(a, b, T, L, [H|SoFar]).
reverse(a, b, [a|T], L, SoFar) :-
reverse(a, b, T, L, [b|SoFar]).
В чем проблема? Кстати, я использую https://swish.swi -prolog.org / для запуска кода.