Prolog movies.pl大多数联袂主演
根据这个数据库,我必须找到前25名男女演员,以及最多的联袂主演。我不知道如何检查所有人,以便找到他们的伴侣 序言中定义的共同主演:Prolog movies.pl大多数联袂主演,prolog,Prolog,根据这个数据库,我必须找到前25名男女演员,以及最多的联袂主演。我不知道如何检查所有人,以便找到他们的伴侣 序言中定义的共同主演:Co_-star(A1,A2),其中A1(演员1)是与A2(演员2)的共同主演 到目前为止,您尝试了什么(编辑您的帖子以添加一些代码)?你犯了什么错误?与你想要的输出相比,输出是什么?你知道你的事实是什么。至少试着用文字描述一下,A1和A2是共同的明星,如果。。。。(事实方面的东西)。从那里,你可以到达序言。如果您不熟悉Prolog,请尝试一本教程或一本好的Prolo
Co_-star(A1,A2)
,其中A1
(演员1)是与A2
(演员2)的共同主演
到目前为止,您尝试了什么(编辑您的帖子以添加一些代码)?你犯了什么错误?与你想要的输出相比,输出是什么?你知道你的事实是什么。至少试着用文字描述一下,
A1
和A2
是共同的明星,如果。。。。(事实方面的东西)。从那里,你可以到达序言。如果您不熟悉Prolog,请尝试一本教程或一本好的Prolog书籍。对于co_star
,您根本不需要findall
。请记住:您正在定义一个规则,该规则定义A1
是否是A2
的联星,而不是试图在该点收集所有联星。。试着不要这么急迫地思考。在prolog中,如果您说,演员(电影、人物、角色)
这是一个查询,prolog将通过回溯一个接一个地生成电影
、人物
和角色
的每个解决方案。共同主演是同一部电影中的演员,这是一个你没有捕捉到的逻辑元素。最后,actor
事实需要3个参数,而不是2个。你需要考虑女演员。谢谢你的解释!忘了具体说明:在我的例子中,没有“角色”争论,只有电影和人物。
co_star(A1,A2,N):-
findall(M,actor(M,A1),L1), %L1: movies, starring A1
findall(M2,actor(M2,A2),L2), %L2: starring A2
intersection(L1,L2,L), %L: starring A1 and A2
length(L,N),
N>0. %if the list of the movies is more than 1, they are co-stars.
top_25:- %so, the actual problem
findall(A1,actor(_M,A1),L1), %L1: I think I should store all the actors
findall(A2,actor(_M,A2),L2),
findall(N,co_star(F,_A2,N),L), %so I need this list "L" where all the number of co-stars are stored for all the actors(descending, only the top 25)
write(L).