Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Prolog > Поиск людей с самым большим количеством общих


Автор: seltsam 30.11.2015, 12:26
Доброго времени суток, Уважаемые! 
Есть вот такая задача: в пролог-программе заданы отношения likes(Person, Thing) (Person — человек которому нравится вещь Thing). Определить предикат mostResembling(Person1, Person2) для нахождения людей с самым большим количеством общих предпочтений.
Использую SWI-Prolog.
Написала вот такой код
Код

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, phone).
:-dynamic likesInfo/2.
changeDB(X,Y) :-
        (retract(likesInfo(X, C));  C = 0),
        C1 is C + 1,
        assertz(likesInfo(X, C1)).        
existBetter(X):-
        likesInfo(X,C), likesInfo(X1,C1), C1 > C.
mostResembling(L):-
        forall(likes(X, Y),  changeDB(X,Y)),
        findall(X, (likesInfo(X,  _), not(existBetter(X))), L),
        retractall(likesInfo(_,_)).

Но в данный момент у меня находит список людей просто с самым большим количеством предпочтений. А вот как сравнивать сами преподчтения и выбирать самое большое количество никак не пойму. Помогит пожалуйста! Заранее благодарю!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)