Содержатся ли в последовательности все символы указанного слова

      Комментарии к записи Содержатся ли в последовательности все символы указанного слова отключены

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

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

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

    questioner
    Участник

    Помогите решить задачу:

    Для произвольно введённой последовательности символов определить содержатся ли в ней все символы указанного слова в той же последовательности, что и в самом слове.

    Например: последовательность «development» содержит в себе символы слова «dont».

    contain(X, Y) :-
        atom_codes(X, Xcodes),
        atom_codes(Y, Ycodes),
        append(_, End, Xcodes),
        append(Ycodes, _, End).

    Тут проверяется только правильность размещения символов в списках.
    Примеры:
    contain(development,evelop). % -Yes.
    contain(development,dont). % -No.(а должно быть Yes)

    Как можно доработать данную программу?

  • #1942

    contain(_Sequence, []):-!.
    contain([Head|TailSequence], [Head|TailWord]):-
      !, contain(TailSequence, TailWord).
    contain([_HeadSequence|TailSequence], Word):-
      contain(TailSequence, Word).

    На вход подается два списка — последовательность и слово. Если слово не содержит символов, то очевидно, что условие задачи выполняется.
    В противном случае функция проверяет совпадает ли первый символ слова с первым символом последовательности. Если сопоставление прошло успешно — первый символ слова можно убрать. Проверка остальных символов слова выполняется рекурсивно в остатке последовательности.
    Если же проверка завершается неудачей, то мы не можем пропустить первый символ слова, но должны отбросить первый символ последовательности.

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