问题标签 [prolog-setof]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - Prolog中如何在bagof、setof和findall之间进行选择
如何在 bagof、setof 和 findall 之间进行选择?有什么重要的区别吗?哪个最常用,哪个最安全?感谢您的评论/回答。
我查看了SWI-Prolog 手册页findall/3
,发现它们非常相似。
prolog - setof/3 似乎没有删除重复项
我试图找到一个列表的补集,给定一个列表 L1 和一个具有以下代码的通用列表 L2:
但是,我的结果包括重复项,并且没有像我希望的那样以列表形式给出:
我认为这可能是由于 Prolog 的内置回溯,但我不确定如何解决这个问题以正确格式化结果并让它删除结果中的任何重复项。
prolog - 为什么不同元素数量的事实之间的 setof 输出存在差异?
在 Prolog 中,给定一个事实知识库:
查询setof(X, someFact(X), List).
产生以下结果:
但是,查询setof(X, otherFact(one, X,_,_), List
会产生以下结果:
虽然我预计它会产生[two,four]
. 使用此来源,我发现;
在返回第一个列表时键入将显示所有其他选项:
为什么这样做?是因为下划线吗?如何在不按two
和的情况下生成一个集合?我不知道如何找到答案,因为我无法将这个问题转化为产生搜索结果的问题four
;
prolog-setof - Prolog - 在 setof/3 中允许列表 L iff #L > n
我只想打印 Z : Z = wittgenstein,即,我只想拥有拥有3 个或更多崇拜者的偶像。上述谓词的输出:
我想到了以下几点:
但是我该如何使用它呢?
谢谢你。
prolog - prolog中的“^”是什么意思?
我有一个关于电影的知识库。我的演员和演员谓词如下所示:
我试图在我的知识库中计算不同的演员。我只想写:
它不起作用,但它确实如此:
那么那个“^”是什么意思呢?
编辑:看起来每部电影和每个角色只选择一次。但我仍然不确定。
prolog - Prolog 确保规则的返回参数是唯一的并且按照规范顺序
我在 Prolog 文件中声明了一些数据,如下所示:
...
...
请注意,数据没有定义strong1
或weak1
为化合物gen1(...)
。这些是由对最小工作示例没有贡献的规则确定的。我提到它们是因为知道它们的存在可能很有用。
我试图找到形成循环的这些术语之间的关系。这是一个示例函数:
此设置确实删除了A
、B
和C
以相同顺序排列的重复项。但是,它不会删除不同顺序的重复项。例如:
该查询应该只返回一组[A, B, C]
.
我曾考虑过使用sort/2
,但在某些情况下,简单地排序会改变答案的含义:
我也试过<
and >
,但显然那些对原子不起作用。
有什么想法吗?
(我查看了类似的问题,但不知道我在这里所做的与其他人所做的相比如何)
编辑:根据关于最小工作示例的评论。
prolog - Prolog (Sicstus) - setof 和 findall 组合问题
给定给定车站的一组路线,例如我们:
我需要找到具有共同特定车站的线路名称。结果必须是有序的,具有非重复站,并且如果没有结果,则必须返回一个空列表。所以,查询
应该给:
我尝试执行以下操作:
但是,它给出了以下答案:
所以用双括号无序。我尝试仅使用 findall,但结果未排序。我知道我可以编写排序函数并通过它,但是我想知道在这种情况下是否可以只使用 findall 和 setof ?
prolog - Prolog (Sicstus) - 非成员和 setof 问题
鉴于以下事实:
我需要找到所有没有任何公共站点的地铁线路对,生成以下内容:
我想出了下面的答案,但是它不仅给了我不正确的答案,而且也没有应用我的 X^ 条件 - 即它仍然单独打印每个站列表成员的结果:
这是定义产生的输出:
我相信我与会员资格有关的逻辑是不正确的,但是我无法弄清楚哪里出了问题。谁能看到我在哪里失败?
我还按照此处的建议阅读了有关结果收集的 Learn Prolog Now 第 11 章,但是似乎我仍然无法正确使用 ^ 运算符。任何帮助,将不胜感激!
更新:
根据用户 CapelliC 的建议,我将代码更改为以下内容:
然而,下面给出了 (X,Y) 和 (Y,X) 的重复项,但下一步将在单独的规则中删除它们。感谢您的帮助!
prolog - 带有复合谓词的集合
我在prolog的作业中遇到一个问题。
所以,我在序言中有以下事实数据库:
我的目标是创建一个谓词listAllMarks/3
,例如
回报:
为了解决这个问题,我正在考虑使用 prolog setof/3
,所以我提出了以下谓词。
这似乎不起作用,谓词总是返回false。我怀疑这可能是因为我对复合谓词使用 setof,但我可能是错的(我仍处于学习 prolog 的早期阶段)。
你们有什么想法吗?我从各个角度看待这个问题,我被困在这里。
谢谢你。
prolog - Prolog setof/3 不返回所有元素
我正在我的数据库中列出所有犬种大小的列表,例如
所以我从数据库中获取尺寸,但只想拥有唯一的尺寸,以便以后计算它们。如果我使用
我得到重复项,例如 [medium, medium, large, unknown, unknown, unknown]
setof/3 旨在使集合独一无二,所以我尝试了
但它现在只返回第一个条目 [medium]
任何想法为什么?