Найти строки с общими словами - Prolog
Формулировка задачи:
Здравствуйте.
Помогите найти строки с общими словами. Для моего примера это будут: title([война, и, мир]) и
title([гражданская, война]).
Всё что смог. Помогите, please...
Решение задачи: «Найти строки с общими словами»
textual
Листинг программы
title([а, война, и, мир]). title([а, мёртвые, души]). title([а, зори, здесь, тихие]). title([гражданская, война]). similar_title :- setof( Word, List^ ( title(List), member(Word, List) ), WordList ), similar_title_by_word(WordList, SimilarList), writeln(WordList), ( member(SimilarSolve, SimilarList), writeln(SimilarSolve), fail ; true ). similar_title_by_word([], []). similar_title_by_word([Word | WordList], [by(Word, SimilarSolveList) | SimilarList]) :- bagof( similar(SimilarSolve), ( title(Title1), member(Word, Title1), bagof( Title2, ( title(Title2), Title1 @< Title2, member(Word, Title2) ), TitleRest ), SimilarSolve = [Title1 | TitleRest] ), SimilarSolveList ), !, similar_title_by_word(WordList, SimilarList). similar_title_by_word([_ | WordList], SimilarList) :- similar_title_by_word(WordList, SimilarList).
Объяснение кода листинга программы
- В первой строке объявлена функция
title(List)
, которая принимает список слов и проверяет, является ли он общим для всех заголовков. - Затем объявлена функция
similar_title
, которая используетsetof
для получения всех слов из заголовков, которые совпадают с любым из списков. - Функция
similar_title_by_word
используется для группировки общих слов в заголовках. - Если список пуст, то список общих слов также будет пустым.
- В противном случае, функция
bagof
используется для создания списка общих слов. - Если слово совпадает с заголовком, то функция
bagof
вызывается рекурсивно для поиска общих слов в остальных заголовках. - Если слово не совпадает с заголовком, то оно добавляется в список общих слов.
- Наконец, вызывается функция
similar_title_by_word
для обработки следующего слова в списке. - Если список пуст, то список общих слов также будет пустым.
- В противном случае, функция
bagof
используется для создания списка общих слов. - Если слово совпадает с заголовком, то функция
bagof
вызывается рекурсивно для поиска общих слов в остальных заголовках. - Если слово не совпадает с заголовком, то оно добавляется в список общих слов.
- Наконец, вызывается функция
similar_title_by_word
для обработки следующего слова в списке. - Если список пуст, то список общих слов также будет пустым.
- В противном случае, функция
bagof
используется для создания списка общих слов. - Если слово совпадает с заголовком, то функция
bagof
вызывается рекурсивно для поиска общих слов в остальных заголовках. - Если слово не совпадает с заголовком, то оно добавляется в список общих слов.
- Наконец, вызывается функция
similar_title_by_word
для обработки следующего слова в списке. - Если список пуст, то список общих слов также будет пустым.
- В противном случае, функция
bagof
используется для создания списка общих слов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д