我正在尝试为一个从mySql转换为Prolog事实的数据库创建一个Prolog查询。
Prolog事实涉及许多表,但与此查询相关的只有两个:
actor(ID,firstName,lastName)
film_actor(actor_id,film_id)
film(ID, title,_,_,_,_,_,_,_)我正在尝试创建一个声明以下内容的查询:
列出恰好有5名演员的电影的片名。
到目前为止,我成功地创建了这个查询,它列出了所有电影和电影中每个演员的ID:
all((T,AID),(film(FID,C,T,_,_,_,_,_,_),film_actor(AID,FID)),RS).我需要的是计算这个辅助AID和状态,它必须等于每个film_id的5次出现,但我不知道如何从我到目前为止阅读的yap文档中做到这一点。
有什么建议吗?
提前感谢
发布于 2018-10-14 21:34:55
您只需使用findall,然后使用length将列表限制为5个元素,即可获得一个电影ID。
one_film_with_5_actors(FilmID,ActorIDs) :-
findall(AID, (film(FilmID,_,_,_,_,_,_,_,_),film_actor(AID,FilmID)), ActorIDs),
length(ActorIDs, 5).Prolog将返回回溯每一对(FilmID,ActorID),然后将基本访问器应用于这个'grouped by‘DB视图,以获得您需要的信息。
https://stackoverflow.com/questions/52796975
复制相似问题