问题标签 [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.

0 投票
2 回答
169 浏览

module - SICStus 的 make/0 功能

如何确保所有模块(以及理想情况下已加载或包含的所有其他文件)都是最新的?发布时use_module(mymodule),SICStus 会比较文件的修改日期mymodule.pl并重新加载(如果更新)。此外include-ed 文件将触发重新编译。但它不会重新检查mymodule.

简而言之,我怎样才能获得与 SWI 提供的类似功能make/0

0 投票
1 回答
389 浏览

file - 将文本文件中的数据分割成事实列表到 prolog 文件

我想将数据文件分成事实列表,例如functor(arg1, arg2, ..., argN)仿函数的名称是大写行,参数是跟随它们的小写行,随后,新子句保存在执行时创建的序言文件中

文件.txt

结果 :

文件.pl

“。” 将作为最后一个附加

在构建和编译的prolog 文件之后file.pl

0 投票
1 回答
59 浏览

list - 从 maplist/3 结果中过滤随机结果

List=['F1',a1,a2,' LF2',a1,a2]我希望用下面的谓词 is_upper/2 和 maplist/3过滤掉这个列表

is_upper(Elem,Res):如果Elem是大写原子,它将被分配给 Res 然后我想将所有大写原子放入列表List_Upper

我试试这个;

我如何过滤随机数_A,_B...

预期结果:

问候

0 投票
1 回答
271 浏览

concurrency - Prolog 延迟评估:LIFO 或 FIFO 唤醒?

许多 Prolog 系统都有一个freeze/2谓词,这个谓词可能应该有这个名字geler/2,因为它甚至在 Prolog-II 之前就被发明了。

假设我对同一个变量有一个条件,但有两个不同的目标,即:

首选的唤醒策略是什么,是先执行 G1 还是先执行 G2?如果 G1 和 G2 确实产生了新的冻结,它们也被唤醒了怎么办:

G3或G4总是在G1和G2之间执行,还是G3或G4在G1和G2之后执行,甚至更晚?

再见

0 投票
2 回答
459 浏览

prolog - 使用 SICStus 拆分原子,如 SWI 中的 atomic_list_concat/3

我有一个原子'id1,id2,id3',我想用与 SWI 中的谓词 atomic_list_concat/3 相同的方式将其拆分为列表。

预期结果

无论如何,是否可以使用DCG来做到这一点

0 投票
0 回答
141 浏览

prolog - SICStus Prolog:FFI 慢,如何快速计算汉明权重?

当我运行外部代码示例c1/2时,如 SICStus Prolog 4.3.2 手册中所示,并将其运行时与相应的 Prolog 代码进行比较Y is X+9,我得到了奇怪的计时结果:

启用 JIT 后,我观察到:

关闭 JIT ( SP_JIT=disabled) 后,时序变化如下:

即使没有适当的错误处理和对大整数的支持,C 代码的运行时间几乎是 JITted Prolog 代码的 4 倍。关闭 JIT 会稍微改变计时数字,但总体情况保持不变。

如何加快 SICStus 中的汉明权重计算?SWI 有一个专用的算术函数,但 SICStus 似乎不支持它(还)...... popcount/1

0 投票
2 回答
65 浏览

prolog - 将 goal_expansion/6 限制为仅编译时间

在 SICStus Prolog 中,有一个用于扩展目标的钩子:goal_expansion/6它在编译时和运行时在元调用期间都被调用。这些调用会产生相当多的运行时开销,从而减慢元调用的速度。我扩展的目的只是优化。所以在语义上目标和扩展目标是等价的。

如何在运行时禁用此类调用?

(看来我必须取消goal_expansion/6这对我来说有点粗鲁。它也会妨碍轻量级重新编译)。

0 投票
1 回答
369 浏览

prolog - 意外错误“!分段违规”

最近在编译我的项目时,有时会出现意想不到的错误,

错误 :

有没有解释发生了什么!

0 投票
3 回答
343 浏览

prolog - 内置 Prolog 谓词 (is)/2 的性能

更新:11.6.2016

我在 SICStus Prolog 4.3.2 中观察到的令人费解的性能差异在最近发布的 SICStus Prolog 4.3.3中完全消失了。赞!

我更新了下面的“运行时”表以包括 SICStus Prolog 4.3.3。亮点包括:

  • (is)/2比以前快 10 倍
  • val_of/2速度也非常快,几乎快了 2 倍

美高;-)


回答Prolog 语言中的大小程序”问题时, SO 用户 @ThanosTintinidis提出了一种非常简单的方法1,将初学者介绍给deriving length/2

[...] 另请注意,E仅需要实例化它是因为 is 将评估表达式。你可以这样写:

如果你称之为:

有趣,不是吗?您可能想要评估最后一个E,即 call ?- size([1,2], E), N is E。[...]

乐趣? 大乐趣! 许多有趣的实验摆在面前:

  • 左倾树与右倾树

    /li>
  • 内置(is)/2vsval_of/2

    /li>

go(2000000)为了测量我使用不同的 Prolog 处理器2运行的运行时间:

Intel Core i7-4700MQ 上,我使用 SICStus 和 SWI 观察到以下运行时:

我对这些(可重现的)结果感到困惑......有人可以告诉我发生了什么吗?


脚注 1:为了简洁和可读性,变量名称稍作修改。
脚注 2:使用合适的命令行参数运行 SWI-Prolog 7.3.20 swipl -G2G -L2G -O

0 投票
1 回答
96 浏览

prolog - Prolog:包含断言的规则仅将第一个结果添加到事实

我正在尝试预先计算一些东西并将结果保存为程序开头的事实:(简化代码)

但是当我在 SICStus Prolog 中查阅文件时,只有第一个结果 cost(1,20) 被断言:

但是,当我直接在 SICStus prolog 控制台中输入 assert_all 的右侧时,两个 cost/2 事实都在那里。

我发现这种行为非常令人困惑,这是怎么回事?