首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog新手入门-列表挑战

Prolog新手入门-列表挑战
EN

Stack Overflow用户
提问于 2011-05-15 00:09:42
回答 1查看 226关注 0票数 2

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

所以我决定自学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合作过的人一起工作。

有人能给我一些关于如何解决这个问题的建议吗?谢谢!!

EN

回答 1

Stack Overflow用户

发布于 2011-05-15 02:18:40

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

因此,您实际上必须编写一个谓词,如

网络(Person1、Person2、Person3、Person4)。

第一步是编写谓词worked_with(Person1,Person2)

类似于:

代码语言:javascript
复制
worked_with(Person1,Person2):-
    participates(Person1,X,_),
    participates(Person2,X,_),
    Person1 \= Person2.

在此之后,网络谓词将类似于

代码语言:javascript
复制
network(P1,P2,P3,P4):-
    worked_with(P1,P3),
    worked_with(P2,P4),
    worked_with(P3,P4).

但是,这个谓词使用ID而不是名称作为输入;您只需要编写一个将进行解码的包装器。我认为你可以试着自己把它写成练习:

顺便说一句,如果您刚刚开始学习prolog,我真的不认为有理由尝试像这样复杂的东西;首先尝试一些简单的东西来掌握prolog的行为方式

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6003055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档