Prolog新手 - 挑战列表

时间:2011-05-14 16:09:42

标签: list prolog

首先,我为可能犯的任何错误道歉,因为英语不是我的第一语言。

所以我决定自己学习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曾经合作过的人员名单上的某个人合作过,那就已经合作了。

任何人都可以告诉我如何解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:1)

在prolog中,没有“返回值”这样的东西

因此,你实际上必须写一个像

这样的谓词

网络(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的行为方式