Замена подсписка на Prolog

В этой теме 1 ответ, 2 участника, последнее обновление  Васильев Владимир Сергеевич 3 нед., 1 день назад.

  • Автор
    Сообщения
  • #4322

    arkarkyaw
    Участник

    В списке символов S1, S2, …, SN каждую указанную последовательность символов заменить на другую указанную последовательность.

  • #4323

    change_sublist(List, SubA, SubB, Changed):-
        divide_list(List, [Left, SubA, Right]), !,
        change_sublist(Left, SubA, SubB, ChangedLeft),
        change_sublist(Right, SubA, SubB, ChangedRight),
        divide_list(Changed, [ChangedLeft, SubB, ChangedRight]).
    change_sublist(List, _SubA, _SubB, List).

    С помощью функции divide_list мы разделяем список на три части (Левую, SubA, Правую). Где SubA – заменяемый список. Если такое разделение удалось – сработает первое правило, тогда рекурсивно выполняется замена для левой и правой частей списка, а затем полученные части соединяются вместе также с помощью divide_list.

    Если же разделение не удалось (в списке нет ни одного вхождения SubA) – срабатывает второе правило, возвращающее в качестве результата исходный список.

    Вложения:

Для ответа в этой теме необходимо авторизоваться.