问题标签 [prolog-anonymous-variable]
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:匹配一个或多个匿名变量
[_, [ X , _ ],_] 将匹配像 [d, [X,a], s] 这样的列表。有没有办法将它与任何有一个或多个匿名变量的模式相匹配?IE。[[X,a],s] 和 [[d,a],[p,z], [X,b]] 会匹配吗?
我正在尝试编写一个程序来计算列表中的元素,即。[a,a,a,b,a,b] => [[a,4],[b,2]] 但我被卡住了:
谢谢。
prolog - 比较 prolog 匿名变量
我在序言中有一系列包含匿名变量的事实_
。
我有一些规则可以列出这些事实:
但是,这是行不通的。该规则不超过第一个子句H == fact(a, _)
。我究竟做错了什么?是否有不同的相等运算符?
prolog - Prolog 匿名变量
这是我对 Prolog 变量的理解。
单个下划线代表匿名变量,每次出现时就像一个新变量。
像 _W 这样以下划线开头的变量名不是匿名变量。或者,在 Prolog 中生成的变量名,比如 _G189,不被认为是匿名的:
你能帮我理解吗?
顺便说一句,我从一些教程中得到了上面的例子,但是当我在 SWI-Prolog 版本 6 中运行它时,我得到以下信息:
感谢您。
prolog - Prolog 和列表统一
我正在努力加深对 Prolog 的理解,以及它如何处理统一。在这种情况下,它如何处理与列表的统一。
这是我的知识库;
如果我正确理解了这个过程。如果member(X, [X|_])
不为真,则进入递归规则,如果X
在列表中T
,则[_|T]
与 统一T
。
那么我的递归谓词中的匿名变量会发生什么?它会被丢弃吗?我很难理解列表的确切统一过程,因为[_|T]
是两个变量,而不是一个。我只是想弄清楚统一过程如何与列表精确配合。
prolog - 一阶逻辑 Prolog 匿名变量
Prolog 规则如下:
一阶逻辑将是:
理论上,如果我们的 Prolog 规则中有一个匿名变量,例如:
假设它是一个姓氏,我们如何以一阶逻辑呈现它?
prolog - Prolog:冗余导致涉及匿名变量的子句
考虑以下 Prolog 程序。
运行查询:
在 SWI-Prolog 中,我们得到三个结果,所有 X = 1。
鉴于我们不关心匿名变量,是什么阻止了 SWI-Prolog 返回单个结果?为什么不执行此优化?
谢谢
prolog - 匿名变量 - prolog - 一些查询
你能帮我理解回答下一个查询的引擎吗?
还有一些额外的查询(与匿名变量无关):
我知道上述查询的答案,但我想了解 prolog 如何找到这些答案:)
谢谢!
prolog - Prolog 中如何解释匿名变量?
一个关于匿名变量在给定一组程序规则的 Prolog 查询解析中扮演什么角色的快速而简单的问题。因此,按照我理解 SLD 解析的最简单形式如何工作的方式,SLD 树是通过从一组目标术语中获取一些术语(基于选择规则,例如 FIRST)并遍历所有程序规则以查看哪个规则的左手边(可以这么说的结果)可以与手头的术语统一。统一两个给定项的方法是取两个项的差异集,看看是否可以用变量替换项,使差异消失,你可以通过连续取最左边的单个差异并检查是否,在两个集合中构成差异,
现在,当匿名变量 (_) 发挥作用时,我怀疑正确有效地执行此操作的诀窍在于改变确定两个术语之间最左边差异的方式,以便在其中一个是匿名变量时忽略一对术语。显然正确的方法是重命名目标中 _ 的每个实例,并将程序设置为新的变量名并使用它们来解决。
它实际上是如何完成的?我的想法是否足够,或者还有更多?(此外,如果在我理解 SLD 解析工作的方式中缺少某些东西,我将不胜感激,除非否定、调用、封装、算术谓词和更复杂的东西。)
prolog - 在 Prolog 中使用匿名变量和“普通”变量时的不同答案
我有以下数据库:
当我进行查询时,vegetarian(_).
我期望得到_ = jose; _ = james.
,但我却得到true; true.
如果我改为这样做vegetarian(X).
,那么我会得到预期的答案X = jose; X = james.
为什么会有这种差异?