首先,我为可能犯的任何错误道歉,因为英语不是我的第一语言。
所以我决定自己学习Prolog,并且遇到了这个“挑战”。
我有关于电视节目的这个数据库。它有以下谓词:
人(PERSON_ID,名称)。
展(Show_id,名称)。
参与(PERSON_ID,Show_id,活动)。
我要弄清楚的是两个人之间的关系......我必须写一个这样的目标: 网络(Person1,Person2),给出2人的名字(Person1,Person2)给出其他2人的名字,Person3和Person4 - Person1在任何节目上与Person3合作,Person2与Person4,Person3和Person4都在一起工作。
我列出了Person1曾经参与过的所有节目,然后列出了Person2所有节目的列表。
我的问题是如何从这里继续。我想要列出所有在Person1工作的节目中工作过的人的列表,以及另一个列出所有在节目Person2工作过的人的列表,然后尝试找出所有人中是否有人Person1如果有人与Person2曾经合作过的人员名单上的某个人合作过,那就已经合作了。
任何人都可以告诉我如何解决这个问题吗?谢谢!
答案 0 :(得分:1)
因此,你实际上必须写一个像
这样的谓词网络(PERSON1,PERSON2,Person3可能,Person4)。
第一步是编写谓词working_with(Person1,Person2)
类似的东西:
worked_with(Person1,Person2):-
participates(Person1,X,_),
participates(Person2,X,_),
Person1 \= Person2.
之后,网络谓词就像
network(P1,P2,P3,P4):-
worked_with(P1,P3),
worked_with(P2,P4),
worked_with(P3,P4).
但是,此谓词使用ID作为输入而不是名称; 你只需要编写一个可以进行解码的包装器。 我认为你可以尝试自己写一个练习:b
顺便说一句,如果你刚刚开始学习prolog,我真的不认为有理由尝试像这样复杂的东西;首先尝试更简单的方法来掌握prolog的行为方式