首先,我为我可能犯的任何错误道歉,因为英语不是我的第一语言。
所以我决定自学Prolog,我遇到了这个“挑战”。
我有一个关于电视节目的数据库。它有以下谓词:
person(Person_id,姓名)。
show(Show_id,Name)。
参与(Person_id,Show_id,Activity)。
我要弄清楚的是两个人之间的关系...我必须写一个这样的目标: network( Person1,Person2),给定两个人的名字(Person1,Person2),Person3和Person4 -Person1在任何节目中都与Person3合作,Person2与Person4合作,Person3和Person4都合作过。
我列出了Person1参与过的所有节目,然后列出了Person2参与过的所有节目。
我的问题是如何从这里继续。我想列出一份清单,列出Person1参与过的节目的所有人,再列出一份清单,列出Person2参与过的所有节目的人,然后试着找出在所有Person1合作过的人中,是否有人和Person2合作过的人一起工作。
有人能给我一些关于如何解决这个问题的建议吗?谢谢!!
发布于 2011-05-15 02:18:40
在prolog中没有“返回值”这样的东西。
因此,您实际上必须编写一个谓词,如
网络(Person1、Person2、Person3、Person4)。
第一步是编写谓词worked_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而不是名称作为输入;您只需要编写一个将进行解码的包装器。我认为你可以试着自己把它写成练习:
顺便说一句,如果您刚刚开始学习prolog,我真的不认为有理由尝试像这样复杂的东西;首先尝试一些简单的东西来掌握prolog的行为方式
https://stackoverflow.com/questions/6003055
复制相似问题