问题标签 [sicstus-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 - SICStus Prolog:受 JIT 影响的统计信息/2 个值
更新:正如@PerMildner 所报告的,以下问题(存在于 SICStus Prolog 4.3. 2中)已随着新的 SICStus Prolog 4.3 消失。3!好样的!
我正在使用 SICStus Prolog 4.3.2,并且我正在了解一些我以前没有使用过的键......这是我的代码: statistics/2
call_keys_deltas/3
收集有关谓词执行的一些信息,例如:
我期待有两个选择点?- boolsA([0,0]).
——但没有?- boolsB([0,0]).
JIT 运行后立即得到的数字与运行完成后得到的数字不同:
使用 JIT
/li>没有JIT
/li>
我想知道上述差异是否是故意的......感谢您的帮助!
cmd - 如何使用 spld SICStus 将版本信息添加到构建 .exe 文件
我有以下用于构建我的 Prolog 程序的批处理程序。
VERSION 变量从用户那里读取,并作为标志发送到 build_program.pl 执行此操作:
基本上它会构建 .sav 文件,然后 spld 使用该文件来构建 .exe 文件。
我想将元数据添加到构建 .exe 中,我知道 wjen 使用 c++ 你必须添加一个资源文件,所以我尝试了这个..
其中 VERSIONINFO.rc 是:
但是在运行 spld 时出现以下错误
cl:命令行警告 D9024:无法识别的源文件类型“VERSIONINFO.rc”,假定为目标文件 VERSIONINFO.rc:致命错误 LNK1136:文件无效或损坏
unix - 在 sicstus-prolog 中将注释字符串转换为 ASCII 字符列表
目前我正在研究 SICStus3 和 SICStus4 之间的比较,但我遇到了一个问题,即 SICStus4 不会参考注释字符串具有回车控件或制表符等的任何情况,如下所示。
下面给出的示例案例。它有 3 个带逗号分隔符的参数。
以下谓词将在上述情况下删除评论部分。
现在我的要求是将注释字符串转换为 ASCII 字符列表。
prolog - Prolog:测试是否设置了位
我使用任意精度的整数来表示密集的位向量——大小从十几个到几千不等。
我的代码经常需要检查是否设置了某些位(或未设置),因此我做了一些微基准测试,以查看某些变化是否明显快于其他变化:
对于 SWI 和 SICStus,上述变体都(几乎)同样快。
然后我偶然发现了 SWI-Prolog 手册中以下有趣的部分:
getbit(+IntExprV, +IntExprI)
计算为 的第 - 位的位值(
0
或1
)。两个参数都必须计算为非负整数。结果等效于,但更有效,因为避免了移位值的具体化。IntExprI
IntExprV
(IntExprV >> IntExprI)/\1
未来的版本将优化
(IntExprV >> IntExprI)/\1
对 的调用getbit/2
,同时提供可移植性和性能。
所以我检查了getbit/2
:
我使用以下代码进行微基准测试:
随着run(runtime, 10000000, 1<<1000-1, 200)
我观察这些运行时:
看起来:
getbit/2
给 SWI-Prolog 500% 的加速。命令行选项
-O
为 SWI-Prolog 带来了显着的加速。
是否有更好的公式(arith. fun.等)来获得与 SICStus 类似的加速?
先感谢您!
prolog - SICStus Prolog 忽略更改
我对序言很陌生。使用 SICStus,当我对已查阅过的文件进行更改时,SICStus 无法识别这些更改。唯一的方法是我关闭窗口并重新启动它。但显然这是不切实际的,因为每次更改文件时都关闭窗口不仅烦人而且浪费时间。我正在使用 Windows 版本的 Sicstus 4.2.1。到目前为止,我已经尝试过命令consult(file)、reconsult(file)、compile(file),但没有一个有所作为。SICStus 只是忽略所做的更改,直到我关闭并打开窗口。
比如说,我有谓词 test/2。然后我删除了它并保存了文件。然后我输入 reconsult(file)。我的期望是 SICStus 会识别所做的更改并说谓词不存在。但它继续存在,就好像它存在一样。只有在我关闭窗口并重新开始之后,它才会正确地抱怨谓词不存在。
奇怪的是,它使用 reconsult(file) 识别新添加的谓词,但如果它被更改或删除,它不会。
prolog - SICStus Prolog:查找所有解决方案
有没有一种方法可以显示所有解决方案和/或找到 SICTus prolog 中有多少?例如,下面的代码可能用于解决地图着色问题。
目前,我;
每次都在打字以查看进一步的解决方案,直到 Prolog 拒绝。有没有一种方法可以告诉 prolog 一次显示所有解决方案,或者更好的是,我可以找到有多少解决方案。就像 prolog 告诉我的,这个问题有五个解决方案。
prolog - 相当于 SWIProlog 中 SICStus 的 nvalue/2
CLP(FD) 库的SICStus手册说:
nvalue(?N, +Variables)
其中Variables
是具有有限边界或整数的域变量列表,N
是整数或域变量。如果N
是 所采用的不同值的数量,则为 真Variables
。
当想要最小化解决方案中不同值的数量时,这一点特别有用。例如,如果有人试图将物品分配到不同尺寸的袋子中,并希望尽量减少袋子的数量。
在 SWI Prolog 中是否有等效的谓词(或方法)来实现相同的效果?
prolog - 考虑到子术语,如何在 Prolog 中比较两个列表?
我想比较两个列表,同时考虑和比较它们的每一个子项。例如,如果我有列表[1, t1(2, t2(3), 4)]
and [1, t1(2, t2(2), 4)]
,结果应该是第一个大于 ( >
) 比第二个更大,因为3 > 2
在 terms t2
(这是 term 的一部分t1
)。
我想到了这样的事情:
所以输入是两个列表,输出是一个数学符号,表示它们之间的关系。
也许我的问题有点混乱,但这可以以某种方式完成吗?
编辑:
对不起,我忘了提到我想在算术上比较数字,按标准顺序比较所有其他术语。这就是为什么我有点卡住了。
sicstus-prolog - 使用 SPIDER IDE 在 SICStus 中编译 Prolog 时出错
我刚刚为 Eclipse 安装了 SICStus Prolog 和 SPIDER IDE 插件。SPIDER 是使用更新站点安装的,我在首选项中设置了 SICStus 安装路径并进行了验证。然后我创建了一个新的工作区和一个仅包含以下文件的 Prolog 项目test.pl
:
当我编译(菜单:SICStus > 编译 Prolog 代码)时,我在“Toplevel”窗口中收到以下消息:
我的版本号是:
- macOS 10.12.5
- Java SE 1.8.0_65
- 日食 4.6.0
- SICStus 4.0.8
- 蜘蛛 0.0.64
SICStus 安装是预先构建的安装。
我从未与 SICStus 合作过,因此我们将不胜感激。