Ответ в теме: Заменить часть списка в Prolog

      Комментарии к записи Ответ в теме: Заменить часть списка в Prolog отключены
#1784

swap_ab([97, 98|T], [98, 97|TR]):-
!, swap_ab(T, TR).
swap_ab([H|T], [H|TR]):-
!, swap_ab(T, TR).
swap_ab(_, []):-!

97 — это символ ‘a’, 98 — ‘b’. Вместо кодов символов можно можно использовать char_code.
Функция отделяет два первых символа если она составляют «ab», обрабатывает остальные символы рекурсивно. К полученному результату дописывает «ba».
Если отделить символы «ab» от начала списка не получилось, то отделяется лишь один элемент, который дописывается к результату рекурсивной обработки остальных.
В противном случае (если не получилось отделить первый элемент, т.е. если список пуст) — функция возвращает пустой список в качестве результата.