Ответ в теме: База даныых: социальные сети

      Комментарии к записи Ответ в теме: База даныых: социальные сети отключены
#3338

Oleg1
Участник

domains
socialn = string
name = string
sex = string
age = integer
height = real
time = real
who = string
where = string																																	
predicates
user(integer,socialn, name)
profile(socialn,name,sex,age,height)
post(integer,socialn,who,time,where)
privatesms(integer,socialn,who,time,where)
fc(integer, integer,string)
lfc(integer,integer)
fcl(integer,integer,string,integer)
pc(integer, integer,string)
psc(integer, integer,string)
uc(integer,integer,string)
zapt1(string)
zapt2
friend(integer,socialn,who,where)
clauses
user(1,vkontakte, oleg).
user(2,facebook, kolya).
user(3,facebook, sasha).
user(4,vkontakte, dima).
user(5,odnoklasniki, vika).
user(6,vkontakte, masha).
user(7,odnoklasniki, katya).
user(8,vkontakte, igor).
user(9,vkontakte, nikita).
user(10, facebook,oleg).
profile(vkontakte, oleg, male, 20, 1.85).
profile(facebook, oleg, male, 20, 1.85).
profile(vkontakte, igor, male, 22, 1.79).
profile(vkontakte, nikita, male, 44, 1.81).
profile(facebook, kolya, male, 20, 1.80).
profile(facebook, sasha, male, 22, 1.77).
profile(vkontakte, dima, male, 21, 1.79).
profile(odnoklasniki, vika, female, 19, 1.68).
profile(vkontakte, masha, female, 20, 1.81).
profile(odnoklasniki, katya, female, 24, 1.72).
post(1,vkontakte, oleg, 17.32, dima).
post(2,vkontakte, dima, 18.21, oleg).
post(3,facebook, kolya, 00.40, sasha).
post(4,facebook, sasha, 01.13, kolya).
post(5,vkontakte, masha, 07.08, oleg).
post(6,odnoklasniki, vika, 13.22, katya).
post(7,odnoklasniki, katya, 17.44, vika).
privatesms(1,vkontakte, oleg, 14.55, dima).
privatesms(2,odnoklasniki, vika, 09.22, katya).
friend(1,odnoklasniki, vika, katya).
friend(2,vkontakte, oleg, dima).
friend(3,vkontakte, oleg, igor).
friend(4,vkontakte, oleg, nikita).
uc(0,S,_) :- write("Social count = ", S),nl.
uc(N,S,Name) :- user(N,C,Name),S1=S+1,N1=N-1,write("Social network = ", C),nl, uc(N1,S1,Name); N1=N-1,uc(N1,S,Name).		
fc(0,S,_) :- write("Friend count = ", S),nl.
fc(N,S,Name) :- friend(N,_,Name,_),S1=S+1,N1=N-1,fc(N1,S1,Name); N1=N-1,fc(N1,S,Name).	
pc(0,S,_) :- write("Post count = ", S),nl.
pc(N,S,Name) :- post(N,_,Name,_,_), S1=S+1, N1=N-1,pc(N1,S1,Name); N1=N-1,pc(N1,S,Name).
psc(0,S,_) :- write("Privatesms count = ", S),nl.
psc(N,S,Name) :- privatesms(N,_,Name,_,_), S1=S+1, N1=N-1,psc(N1,S1,Name); N1=N-1,psc(N1,S,Name).
lfc(0,S) :- write(S),nl.
lfc(N,S) :- user(N,_,X), fcl(4,0,X,N); lfc(N,S).
fcl(0,S,_,C) :- C1=C-1,lfc(C1,S).
fcl(N,S,X,C) :- friend(N,_,X,_), S1=S+1, N1=N-1, fcl(N1,S1,X,C); N1=N-1, fcl(N1,S,X,C).
zapt1(Name) :- uc(10,0,Name), fc(4,0,Name), pc(7,0,Name), psc(2,0,Name).
zapt2 :- 	lfc(10,0).

Немного переписал код, смог реализовать первый запрос — «Вывести статистику для указанного пользователя (ввести имя с клавиатуры): в каких соц.сетях зарегистрирован, сколько друзей, постов, личных сообщений имеет.» Во втором не могу найти у кого меньше друзей.

В этих правилах я перебираю всех пользователей и нахожу количество друзей у каждого пользователя.

lfc(0,S) :- write(S),nl.
lfc(N,S) :- user(N,_,X), fcl(4,0,X,N); lfc(N,S).
fcl(0,S,_,C) :- C1=C-1,lfc(C1,S).
fcl(N,S,X,C) :- friend(N,_,X,_), S1=S+1, N1=N-1, fcl(N1,S1,X,C); N1=N-1, fcl(N1,S,X,C).

Подскажите пожалуйста, как сравнить количество друзей каждого пользователя и найти минимальное?