首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog中两个元组列表的交集

问Prolog中两个元组列表的交集
EN

Stack Overflow用户
提问于 2014-03-10 21:26:51
回答 2查看 206关注 0票数 1

我试图使用intersection()函数在Prolog中找到两个列表的交集。不幸的是,我的代码给出了不理想的结果。

以下是我所拥有的:

代码语言:javascript
复制
RESULTA = [ ('10:00 am - 11:15 am', 'TR'), ('6:00 pm - 8:50 pm', 'T'), ('6:00 pm - 8:50 pm', 'R'), ('6:00 pm - 8:50 pm', 'M')].

RESULTB = [ ('6:00 pm - 8:50 pm', 'R'), ('3:00 pm - 3:50 pm', 'TR')].

intersection(RESULTA, RESULTB, AB).

所需的输出是('6:00 pm - 8:50 pm', 'R'),但是代码返回RESULTA = AB, AB = [].

有没有人知道如何解决这个问题?

编辑

RESULTA和RESULTB实际上是由bagof()操作生成的。我的实际代码是:

代码语言:javascript
复制
1 ?- bagof((TIME, DAYS), COURSE^teaches_at('Dr. J. Leidig', COURSE, TIME, DAYS), RESULTA).
RESULTA = [ ('10:00 am - 11:15 am', 'TR'), ('6:00 pm - 8:50 pm', 'T'), ('6:00 pm - 8:50 pm', 'R'), ('6:00 pm - 8:50 pm', 'M')].

2 ?- bagof((TIME, DAYS), COURSE^teaches_at('Dr. El-Said', COURSE, TIME, DAYS), RESULTB).
RESULTB = [ ('6:00 pm - 8:50 pm', 'R'), ('3:00 pm - 3:50 pm', 'TR')

很抱歉给你造成了混乱。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-10 21:35:43

问题中的代码实际上是对Prolog的查询。

有3种不同的查询:每个查询以句点结束。所有三个查询都是完全独立的,即使它们使用相同的名称共享变量。

要做您想做的事情,只需将句点更改为逗号:

代码语言:javascript
复制
RESULTA = [ ('10:00 am - 11:15 am', 'TR'), ('6:00 pm - 8:50 pm', 'T'), ('6:00 pm - 8:50 pm', 'R'), ('6:00 pm - 8:50 pm', 'M')],
RESULTB = [ ('6:00 pm - 8:50 pm', 'R'), ('3:00 pm - 3:50 pm', 'TR')],
intersection(RESULTA, RESULTB, AB).

问题更新后的最新情况:

代码语言:javascript
复制
bagof((TIME, DAYS), COURSE^teaches_at('Dr. J. Leidig', COURSE, TIME, DAYS), RESULTA),
bagof((TIME, DAYS), COURSE^teaches_at('Dr. El-Said', COURSE, TIME, DAYS), RESULTB),
intersection(RESULTA, RESULTB, AB).
票数 1
EN

Stack Overflow用户

发布于 2014-03-10 21:34:57

您必须在规则中使用该变量,如

代码语言:javascript
复制
test(AB) :-
    RESULTA = [ ('10:00 am - 11:15 am', 'TR'), ('6:00 pm - 8:50 pm', 'T'), ('6:00 pm - 8:50 pm', 'R'), ('6:00 pm - 8:50 pm', 'M')],
    RESULTB = [ ('6:00 pm - 8:50 pm', 'R'), ('3:00 pm - 3:50 pm', 'TR')],
    intersection(RESULTA, RESULTB, AB).

那就查阅档案。你会得到

代码语言:javascript
复制
?- test(AB).
AB = [ ('6:00 pm - 8:50 pm', 'R')].
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22311661

复制
相关文章

相似问题

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