Найти строки с общими словами - 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).

Объяснение кода листинга программы

  1. В первой строке объявлена функция title(List), которая принимает список слов и проверяет, является ли он общим для всех заголовков.
  2. Затем объявлена функция similar_title, которая использует setof для получения всех слов из заголовков, которые совпадают с любым из списков.
  3. Функция similar_title_by_word используется для группировки общих слов в заголовках.
  4. Если список пуст, то список общих слов также будет пустым.
  5. В противном случае, функция bagof используется для создания списка общих слов.
  6. Если слово совпадает с заголовком, то функция bagof вызывается рекурсивно для поиска общих слов в остальных заголовках.
  7. Если слово не совпадает с заголовком, то оно добавляется в список общих слов.
  8. Наконец, вызывается функция similar_title_by_word для обработки следующего слова в списке.
  9. Если список пуст, то список общих слов также будет пустым.
  10. В противном случае, функция bagof используется для создания списка общих слов.
  11. Если слово совпадает с заголовком, то функция bagof вызывается рекурсивно для поиска общих слов в остальных заголовках.
  12. Если слово не совпадает с заголовком, то оно добавляется в список общих слов.
  13. Наконец, вызывается функция similar_title_by_word для обработки следующего слова в списке.
  14. Если список пуст, то список общих слов также будет пустым.
  15. В противном случае, функция bagof используется для создания списка общих слов.
  16. Если слово совпадает с заголовком, то функция bagof вызывается рекурсивно для поиска общих слов в остальных заголовках.
  17. Если слово не совпадает с заголовком, то оно добавляется в список общих слов.
  18. Наконец, вызывается функция similar_title_by_word для обработки следующего слова в списке.
  19. Если список пуст, то список общих слов также будет пустым.
  20. В противном случае, функция bagof используется для создания списка общих слов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы