В списке слов определить следующее и удалить

      Комментарии к записи В списке слов определить следующее и удалить отключены

Главная Форумы Программирование Помощь с решением задач на Prolog Задачи на списки В списке слов определить следующее и удалить

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

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

    yashka
    Участник

    В списке слов определить слово, следующее за словом «приём» и удалить все вхождения этого слова.

  • #2274

    Не важно из чего состоит список — из слов или чисел, функция поиска элемента, следующего за элементом с заданным значением будет выглядеть одинаково:

    get_next_element([], _Element, _NextElement):-!, fail.
    get_next_element([_SingleElement], _Element, _NextElement):-!, fail.
    get_next_element([Element, NextElement|_Tail], Element, NextElement):-!.
    get_next_element([_OtherElement|Tail], Element, NextElement):-
      get_next_element(Tail, Element, NextElement).

    Чтобы было возможно найти следующее слово, список должен состоять не менее чем из двух элементов — поэтому функция завершается неудачей (!, fail) если это условие нарушается.
    Если первым элементом списка является искомое слово, то мы получаем слово следующее за ним и возвращаем результат. На этом вычисление заканчивается, т.е. функция вернет слово, следующее за первым словом «прием» (даже если таких слов в списке могло бы быть несколько).
    Во всех остальных случаях первое слово не совпадает с заданным, значит оно не влияет на результат и может быть пропущено. Остальная часть списка должна быть обработана рекурсивно.

    Функция get_next_element вернет вам значение, которое по заданию требуется удалить из списка. Для удаления вы можете использовать стандартную функцию deleteSWI Prolog) или при ее отсутствии (например, в Visual Prolog) — взять ее реализацию из статьи про обработку списков.

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