问题标签 [iso-prolog]
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 - 在序言中限制变量范围
我想声明一个列表列表,如下所示:
这里,符号A
指的是每个列表中的相同变量。执行 maplist(writeln,xs) 会产生以下输出:
我想A
在每个列表中使用相同的符号,但要使每个列表的变量不同,以提供以下输出:
我完成这项工作的唯一方法是为每个列表赋予其自己的唯一变量,如下所示:
是否有任何 Prolog 语法,因此无需按照示例 2 对每个变量进行编号?我尝试在列表周围添加括号,如下所示:
但这给了我与示例 1 相同的输出。
prolog - 两种变体实现之间的区别
变体谓词的这两种实现之间是否存在任何逻辑差异?
list - 无限的列表是否合理?
在 Prolog 中,统一X = [1|X]
是获得无限列表的明智方法吗?SWI-Prolog 没有任何问题,但 GNU Prolog 只是挂起。
我知道在大多数情况下,我可以将列表替换为
但我的问题是明确地是否可以X = [1|X], member(Y, X), Y = 1
在“理智的”Prolog 实现中使用该表达式。
prolog - 替换序言中的空格
序言中是否可以用某个给定字符替换字符串的所有空格?示例-如果我有一个变量How are you today?
并且我想要How_are_you_today?
prolog - 在跟踪元解释器序言中实现剪切
我有这个跟踪元解释器,从上一个问题Prolog unbind bound variable改变。
我不明白如何解释cut。感谢用户@false,他告诉我cut 的实现很糟糕,我的问题是,我应该如何在这个元解释器中实现cut?
prolog - Prolog 中更安全的类型测试
ISO-Prolog(ISO/IEC 13211-1:1995 包括 Cor.1:2007、Cor.2:2012)提供以下内置谓词来测试术语的类型:
8.3 型式试验
1 var/1。2个原子/1。3 整数/1。4个浮子/1。5个原子/1。6化合物/1。7 无变量/1。8个数字/1。9个可调用/1。10地/1。11 非循环术语/1。
在这一组中,有些人的目的仅仅是测试某个实例化,即 8.3.1 var/1
、 8.3.7 nonvar/1
、 8.3.10 ground/1
,以及那些假设一个术语已充分实例化以使型式测试是安全的。不幸的是,它们与具体实例化的测试相结合。
考虑如果是非整数的非变量项并且何时是变量,则integer(X)
失败的目标。这会破坏许多理想的声明性属性:X
X
理想情况下,第二个查询要么使用某种形式的协程成功;要么 否则它会根据错误分类发出实例化错误1 。毕竟:
7.12.2 错误分类
错误按照Error_term的形式分类:
a) 当参数或其组件之一是变量并且需要
实例化参数或组件时,应存在实例化错误。它有
形式instantiation_error
。...
请注意,实例化测试和类型测试的这种隐式组合会导致 Prolog 程序以及 SO 中的许多错误。
解决这种情况的一个快速方法是在每个内置测试之前添加一个显式测试,或者详细地为
或更紧凑地为
甚至可能
我的问题是双重的:
如何在用户级别提供此功能?
而且,为了使这也有点挑战性:
atomic/1
用 ISO-Prolog 编写的更安全的最紧凑的实现是什么?
1 其他不太理想的选择是循环或产生资源错误。仍然比不正确的结果更可取。
prolog - 变量列表中的变量出现
考虑一个(元逻辑)谓词var_in_vars(Var, Vars)
,它接受一个变量Var
和一个变量列表,Vars
如果Var
出现在Vars
. 所以我们不需要确保它Var
是一个变量,也不是一个变量Vars
列表。
在 ISO Prolog 中表达这一点的最紧凑和最规范的方式是什么?以下是ISO/IEC 13211-1:1995 中内置函数的概述,包括 Cor.2:2012。
prolog - 由于 ** 和 ^ 的运算符优先级不同导致的轻微不一致
为什么 Prolog 中**/2
( xfx
) 和(^)/2
( xfy
) 的参数优先级不一样?
这会导致轻微的不一致,例如:
和:
但:
prolog - 两个变量集的并集
给定两个变量列表,在 ISO Prolog 中确定两者并集的最紧凑和规范的方法是什么?也就是说,我们想要(元逻辑)谓词的定义
和列表列表
其中Union
是给定VarSet
s 的唯一变量列表。
以下是ISO/IEC 13211-1:1995 中内置函数的概述,包括 Cor.2:2012。
floating-point - Prolog 实现中的“float”是什么意思?
我正在查看 SICStus 手册的语法描述,并且有一个“float”的定义。但是,没有迹象表明“浮动”的实际实现是什么。IEEE 单精度还是双精度?甚至可能是一个BigDecimal
?
在 SWI Prolog (或至少SWISH)中,“浮点数”似乎是 IEEE 双精度,可以通过以下方式确定:
2.22e-16
作为最后一个值,添加后1.0
仍然会产生比1.0
IEEE 64 位浮点运算正确的声音更大的值。
其他 Prolog 有什么实现?
多年后更新
更好的代码:
然后: