问题标签 [warren-abstract-machine]
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 中检查 WAM 代码
在sicstus-prolog上破解clpz的上下文中,我想看看 SICStus Prolog 生成的warren-abstract-machine代码。例如,让我们剖析以下谓词!
这就是我现在正在做的事情:
将 2 个子句拆分
/li>is_list/1
为 2 个单独的谓词并添加 2 个虚拟子句:(Ab-)像这样使用 SICStus prolog-toplevel:
/li>
这个输出——尽管有点神秘——让我对 WAM 级别的情况有所了解。我喜欢!
但是有一个更简单的方法......请帮助!
prolog - WAM 书:处理参数寄存器 (L1) 时如何生成代码?
我正在阅读 Hassan Ait-Kaci 的书Warren's Abstract Machine - A Tutorial Reconstruction。目前我被困在第 2.4 节“参数寄存器”上。
确切地说,我不明白的是如何从这些寄存器分配中获得(第 22 页)(用于查询p(Z,h(Z,W),f(W))
):
对于这些说明(第 24 页):
比如,X5 是从哪里来的?在寄存器赋值中,X4 指的是变量 W,没有 X5。但是在说明中,X5 指的是(本质上是什么)W,而 X4 现在指的是 Z。我在书中没有看到解释。我错过了什么?
prolog - Does Prolog need GC when the occurs check is globally enabled?
As far as I can tell, with sound unification, SLD resolution should not create cyclic data structures (Is this correct?)
If so, one could, in theory, implement Prolog in such a way that it wouldn't need garbage collection (GC). But then again, one might not.
Is this true for WAM-based Prolog implementations?
Is this true for SWI-Prolog? (I believe it's not WAM-based) Is it safe to disable GC in SWI-Prolog when the occurs check is globally enabled?
Specifically:
prolog - 相同结构的 WAM 寄存器分配
Warren 的 Abstract Machine A Tutorial Reconstruction 说明了以下变量寄存器分配规则:
- 变量寄存器是根据最少可用索引分配的。
- 寄存器 X1 总是分配给最外层的项。
- 相同的寄存器分配给给定变量的所有出现。
在本教程的进一步内容中,在构建程序查询时,给出了以下示例:
我的疑问是在考虑 f 子句的两次出现时,它们都是 f/1 结构,但具有不同的主体,因此需要以不同的方式实例化。但是,在 WAM 上下文中,究竟什么是变量、序言变量或每个术语?该条款p(f(a), f(a))
将如何构建:
或者