Найти строки с общими словами - Prolog

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Помогите найти строки с общими словами. Для моего примера это будут: title([война, и, мир]) и title([гражданская, война]).
Листинг программы
  1. title([война, и, мир]).
  2. title([мёртвые, души]).
  3. title([а, зори, здесь, тихие]).
  4. title([гражданская, война]).
  5. predicat1():- findall(X, title(X), List1),
  6. predicat2(List1, []).
Листинг программы
  1. title([война, и, мир]).
  2. title([мёртвые, души]).
  3. title([а, зори, здесь, тихие]).
  4. title([гражданская, война]).
  5. predicat1():- findall(X, title(X), List1),
  6. predicat2(List1, []).
  7. predicat2([],_).
  8. predicat2([List1,List2|Z],List3):-
  9. intersection(List1,List2,R), length(R,0),
  10. predicat2([List2|Z],List3); predicat2([List2|Z],[List1,List2|List3]).
  11. intersection([X1],М2,[X|М]):-
  12. member(X2),!,intersection12,М).
  13. intersection([X1],М2,М):-
  14. not(member(X2)),!,intersection12,М).
  15. intersection([],_,[]).
Всё что смог. Помогите, please...

Решение задачи: «Найти строки с общими словами»

textual
Листинг программы
  1. title([а, война, и, мир]).
  2. title([а, мёртвые, души]).
  3. title([а, зори, здесь, тихие]).
  4. title([гражданская, война]).
  5.  
  6. similar_title :-
  7.     setof( Word,
  8.            List^
  9.            ( title(List), member(Word, List) ),
  10.            WordList
  11.          ),
  12.     similar_title_by_word(WordList, SimilarList),
  13.     writeln(WordList),
  14.     ( member(SimilarSolve, SimilarList), writeln(SimilarSolve), fail
  15.     ; true
  16.     ).
  17.  
  18. similar_title_by_word([], []).
  19. similar_title_by_word([Word | WordList], [by(Word, SimilarSolveList) | SimilarList]) :-
  20.     bagof( similar(SimilarSolve),
  21.            ( title(Title1), member(Word, Title1),
  22.              bagof( Title2,
  23.                     ( title(Title2),
  24.                       Title1 @< Title2,
  25.                       member(Word, Title2)
  26.                     ),
  27.                     TitleRest
  28.                   ),
  29.              SimilarSolve = [Title1 | TitleRest]
  30.            ),
  31.            SimilarSolveList
  32.          ),
  33.     !,
  34.     similar_title_by_word(WordList, SimilarList).
  35. similar_title_by_word([_ | WordList], SimilarList) :-
  36.     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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы