Нахождение людей с самым большим количеством общих предпочтений - 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(_,_,_)).

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

  1. В коде описывается база данных предпочтений людей.
  2. Утверждается, что переменная likesInfo/3 является динамической.
  3. Определяется процедура changeDB/3, которая изменяет базу данных, добавляя новые записи о количестве общих предпочтений между людьми.
  4. Определяется процедура existBetter/2, которая проверяет, есть ли более подходящие общие предпочтения между двумя людьми, чем уже имеющиеся.
  5. Определяется процедура mostResembling/1, которая находит людей с наибольшим количеством общих предпочтений.
  6. В процедуре mostResembling/1 используется процедура findall/3 для сбора всех возможных комбинаций людей с наибольшим количеством общих предпочтений.
  7. В конце кода все записи о количестве общих предпочтений удаляются из базы данных с помощью retractall/1.

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


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

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

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