Ответ в теме: Заменить часть списка в 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” от начала списка не получилось, то отделяется лишь один элемент, который дописывается к результату рекурсивной обработки остальных.
В противном случае (если не получилось отделить первый элемент, т.е. если список пуст) – функция возвращает пустой список в качестве результата.