Найти строки с общими словами - Prolog
Формулировка задачи:
Здравствуйте.
Помогите найти строки с общими словами. Для моего примера это будут: title([война, и, мир]) и
title([гражданская, война]).
Всё что смог. Помогите, please...
Листинг программы
- title([война, и, мир]).
- title([мёртвые, души]).
- title([а, зори, здесь, тихие]).
- title([гражданская, война]).
- predicat1():- findall(X, title(X), List1),
- predicat2(List1, []).
Листинг программы
- title([война, и, мир]).
- title([мёртвые, души]).
- title([а, зори, здесь, тихие]).
- title([гражданская, война]).
- predicat1():- findall(X, title(X), List1),
- predicat2(List1, []).
- predicat2([],_).
- predicat2([List1,List2|Z],List3):-
- intersection(List1,List2,R), length(R,0),
- predicat2([List2|Z],List3); predicat2([List2|Z],[List1,List2|List3]).
- intersection([X|М1],М2,[X|М]):-
- member(X,М2),!,intersection(М1,М2,М).
- intersection([X|М1],М2,М):-
- not(member(X,М2)),!,intersection(М1,М2,М).
- intersection([],_,[]).
Решение задачи: «Найти строки с общими словами»
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
используется для создания списка общих слов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д