Нахождение людей с самым большим количеством общих предпочтений - Prolog
Формулировка задачи:
Доброго времени суток, Уважаемые!
Есть вот такая задача: в пролог-программе заданы отношения likes(Person, Thing) (Person — человек которому нравится вещь Thing). Определить предикат mostResembling(Person1, Person2) для нахождения людей с самым большим количеством общих предпочтений.
Использую SWI-Prolog.
Написала вот такой код
Но в данный момент у меня находит список людей просто с самым большим количеством предпочтений. А вот как сравнивать сами преподчтения и выбирать самое большое количество никак не пойму. Помогит пожалуйста! Заранее благодарю!
Решение задачи: «Нахождение людей с самым большим количеством общих предпочтений»
textual
Листинг программы
likes(tom,book). likes(pam,fish). likes(ann, apple). likes(ann, cat). likes(ann, flower). likes(bob, apple). likes(bob, cat). likes(bob, flower). likes(pem, apple). likes(pem, cat). likes(pem, fish). :-dynamic likesInfo/3. changeDB(X,Z,Y) :- (retract(likesInfo(X, Z, C)); C = 0), likes(X, Y), likes(Z, Y), X \= Z, P is C + 1 , assertz(likesInfo(X, Z, P)). existBetter(X, Z):- likesInfo(X,Z,C), likesInfo(X1, Z1, C1), C1 > C. mostResembling(L):- forall((likes(X,Y), likes(Z,Y), X \= Z), changeDB(X,Z,Y)), findall((X,Z), (likesInfo(X,Z,_), not(existBetter(X, Z))), L), retractall(likesInfo(_,_,_)).
Объяснение кода листинга программы
- В коде описывается база данных предпочтений людей.
- Утверждается, что переменная likesInfo/3 является динамической.
- Определяется процедура changeDB/3, которая изменяет базу данных, добавляя новые записи о количестве общих предпочтений между людьми.
- Определяется процедура existBetter/2, которая проверяет, есть ли более подходящие общие предпочтения между двумя людьми, чем уже имеющиеся.
- Определяется процедура mostResembling/1, которая находит людей с наибольшим количеством общих предпочтений.
- В процедуре mostResembling/1 используется процедура findall/3 для сбора всех возможных комбинаций людей с наибольшим количеством общих предпочтений.
- В конце кода все записи о количестве общих предпочтений удаляются из базы данных с помощью retractall/1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д