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

0 投票
1 回答
276 浏览

prolog - 如何在 SICStus Prolog 中检查 WAM 代码

的上下文中,我想看看 SICStus Prolog 生成的代码。例如,让我们剖析以下谓词!

这就是我现在正在做的事情:

  1. 将 2 个子句拆分is_list/1为 2 个单独的谓词并添加 2 个虚拟子句:

    /li>
  2. (Ab-)像这样使用 SICStus

    /li>

这个输出——尽管有点神秘——让我对 WAM 级别的情况有所了解。我喜欢!

但是有一个更简单的方法......请帮助!

0 投票
1 回答
104 浏览

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。我在书中没有看到解释。我错过了什么?

0 投票
1 回答
96 浏览

prolog - WAM Prolog 有符号表吗?

我正在尝试用 C 编写 Prolog 的 WAM 实现。我注意到 Prolog 数据类型仅在四种标记类型中描述:REF、STR、CON 和 LIS。

执行堆中的每个单元都包含令牌的类型及其在堆中的位置。

在此处输入图像描述

请注意,没有对其实际名称(即 Z、W)的任何引用。堆不应该指向符号表中的符号及其值吗?纯序言实现中是否有符号表?我的解析器是创建符号表还是构造堆?WAM A Tutorial Implementation 没有提到任何这些。

0 投票
1 回答
87 浏览

prolog - WAM 中的扁平化形式

WAM: A Tutorial Reconstruction 指出查询 p(Z, h(Z,W), f(W)) 需要使用以下原则进行展平:

在此处输入图像描述

话虽如此,查询扁平化形式是:

我迷失了外部变量的定义,请考虑以下几点:

Y 是外部变量吗?这个扁平化的形式应该如何?据我了解,这将是构造:

但我不确定,从 X4 开始我很困惑,我应该先分配 h 内部值吗?

0 投票
3 回答
233 浏览

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:

0 投票
0 回答
54 浏览

prolog - 相同结构的 WAM 寄存器分配

Warren 的 Abstract Machine A Tutorial Reconstruction 说明了以下变量寄存器分配规则:

  • 变量寄存器是根据最少可用索引分配的。
  • 寄存器 X1 总是分配给最外层的项。
  • 相同的寄存器分配给给定变量的所有出现。

在本教程的进一步内容中,在构建程序查询时,给出了以下示例:

我的疑问是在考虑 f 子句的两次出现时,它们都是 f/1 结构,但具有不同的主体,因此需要以不同的方式实例化。但是,在 WAM 上下文中,究竟什么是变量、序言变量或每个术语?该条款p(f(a), f(a))将如何构建:

或者