Yap Prolog - перевод SQL-запроса
Я пытаюсь создать запрос Prolog для базы данных, которую я перевел с mySql на факты Prolog.
Факты Пролога касаются многих таблиц, но релевантных для этого запроса всего две:
actor(ID,firstName,lastName)
film_actor(actor_id,film_id)
film(ID, title,_,_,_,_,_,_,_)
Я пытаюсь создать запрос, который утверждает следующее:
Укажите названия фильмов, в которых есть ровно 5 актеров.
До сих пор мне удалось создать этот запрос, который перечисляет мне все фильмы и идентификационные данные каждого актера в этом фильме:
all((T,AID),(film(FID,C,T,_,_,_,_,_,_),film_actor(AID,FID)),RS).
Что мне нужно, так это подсчитать этот AID и указать, что оно должно быть равно 5 вхождениям для каждого film_id. Но я не знаю, как это сделать, из документации по yap, которую я до сих пор читал.
Какие-нибудь советы?
заранее спасибо
1 ответ
Вы можете просто использовать findall, а затем длину, чтобы ограничить список до 5 элементов, чтобы получить один идентификатор фильма.
one_film_with_5_actors(FilmID,ActorIDs) :-
findall(AID, (film(FilmID,_,_,_,_,_,_,_,_),film_actor(AID,FilmID)), ActorIDs),
length(ActorIDs, 5).
Prolog вернется при возврате каждой пары (FilmID,ActorID), а затем применит элементарные методы доступа к этому представлению DB сгруппированных по, чтобы получить необходимую информацию.