Prolog movies.pl大多数联袂主演

Prolog movies.pl大多数联袂主演,prolog,Prolog,根据这个数据库,我必须找到前25名男女演员,以及最多的联袂主演。我不知道如何检查所有人,以便找到他们的伴侣 序言中定义的共同主演:Co_-star(A1,A2),其中A1(演员1)是与A2(演员2)的共同主演 到目前为止,您尝试了什么(编辑您的帖子以添加一些代码)?你犯了什么错误?与你想要的输出相比,输出是什么?你知道你的事实是什么。至少试着用文字描述一下,A1和A2是共同的明星,如果。。。。(事实方面的东西)。从那里,你可以到达序言。如果您不熟悉Prolog,请尝试一本教程或一本好的Prolo

根据这个数据库,我必须找到前25名男女演员,以及最多的联袂主演。我不知道如何检查所有人,以便找到他们的伴侣

序言中定义的共同主演:
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).