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 сгруппированных по, чтобы получить необходимую информацию.

Другие вопросы по тегам