问题标签 [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 投票
3 回答
2834 浏览

prolog - WAM 的替代品

我记得有一次读到至少有两种其他替代品与 WAM 大致同时发明。任何指针?

0 投票
1 回答
167 浏览

prolog - 在沃伦的抽象机器中,参数变量是在哪里创建的?

我正在尝试创建自己的 WAM 实现,并使用“Warren's Abstract Machine: A Tutorial Reconstruction”的图 2.10中的说明作为测试用例。但是,我需要传递A1和传递A2get_structure. 但是这两个变量是在哪里创建的?put_value并且put_variable两者都创建 A 变量,但都没有在说明中列出。

0 投票
1 回答
355 浏览

algorithm - WAM(Warren's Abstract Machine)中的统一算法示例

Warren 的抽象机器中的练习 2.2 :教程重构

要求对术语 f(X, g(X, a)) 和 f(b, Y) 进行表示,然后对这些术语的地址进行统一(分别表示为 a1 和 a2)。

我已经为这些术语构建了堆表示,它们如下:

现在我被要求跟踪统一(a1,a2),但是按照第 20 页的算法,得到:

我的错误在哪里?

0 投票
1 回答
160 浏览

prolog - GNU Prolog:显示 WAM 代码进行查询?

是否可以使用GNU Prolog显示查询的 WAM 代码?

我知道我可以使用 pl2wam 为程序生成 WAM,但是我对程序执行的查询呢?有没有办法为此显示 WAM 代码?

我正在为 x64 Windows 使用 1.4.4 版

0 投票
1 回答
472 浏览

prolog - 用于执行 Prolog 的抽象机器的比较

我正在寻找研究论文或任何其他出版物,它们比较不同的抽象机器(不止一个)来执行 Prolog 与不基于抽象机器的 prolog 解释器。到目前为止,我所看到的是,尽管提出了其他抽象机器(例如Vienna Abstract MachineTree-Oriented Abstract Machine ),但大多数实现似乎都将它们的 prolog 解释器基于Warren Abstract Machine并且没有任何一般性比较。我对效率(而不是功能)的比较感兴趣,尽管所有比较的解释器都应该允许约束逻辑编程。

0 投票
1 回答
290 浏览

prolog - 在沃伦的抽象机器中,如果参数之一是寄存器,绑定如何工作?

我正在尝试创建自己的 WAM 实现,但我被困在练习 2.4

我无法理解如何执行unify_value X4图 2.4 中的指令。

据我了解,该指令应将程序中的 Y 与查询中的 f(W) 统一起来。

unify_value X4调用unify (X4,S)其中 S=2(参见图 2.1)并且相应的堆单元是“REF 2”,而 X4 是“STR 5”。

Unify(图2.7)应该bind是那些值,但是我不明白怎么deref注册。

“REF 2”在堆中,“STR 5”在寄存器中。你怎么bind注册?

0 投票
1 回答
268 浏览

prolog - 显示给定 Prolog 程序的 WAM 代码

给定一个 Prolog 程序,是否有任何 GNU Prolog 命令来查看与该程序相关的 WAM 代码?

0 投票
2 回答
144 浏览

prolog - 什么时候执行 Warren 的抽象机程序指令?

我正在阅读Hassan Aït-Kaci 的“Warren's Abstract Machine: A Tutorial Reconstruction”

第 2 章在 L0 查询编译之后介绍 L0 程序的编译。程序编译部分(2.3)开始于:

编译一个程序术语p只是有点棘手,虽然不是很多。观察它假定查询?- q将在堆上建立一个术语并设置寄存器 X1 以包含其地址。因此,将q统一到p可以通过遵循 X1 中已经存在的期限结构来进行,只要它与函子匹配p的结构。

那么程序的编译是在查询编译得到的指令执行之后进行的吗?这甚至有意义吗?我很困惑...

对我来说有意义的是:由程序的注释语法树生成的 WAM 代码由解释器存储。对于每个过程(在程序中定义),都会存储一个 WAM 代码块。进行查询时,会生成并执行其指令。如果查询正在调用已定义的过程,则执行其代码块。是这样的吗?

0 投票
1 回答
117 浏览

prolog - 为 L0 程序术语生成 WAM 代码的正确顺序是什么?

Hassan Aït-Kaci 的“Warren's Abstract Machine: A Tutorial Reconstruction”第 2.2 节中,L0 查询的编译顺序非常明确:寄存器必须使用从左到右的广度优先搜索分配,代码必须使用左-右后序深度优先搜索。

在 2.3 节中,寄存器分配(L0 程序)的顺序很明确:从左到右的广度优先搜索。代码生成的顺序不是。给出了唯一的例子,我不知道我应该使用 BFS 还是 DFS 来生成代码。

有人可以给我以下 L0 程序的 WAM 代码吗?

p(q(r(a)),s(b))。

0 投票
0 回答
83 浏览

prolog - Ait-Kaci 的 WAM L1 的代码生成如何工作?

Hassan Aït-Kaci 的“Warren's Abstract Machine: A Tutorial Reconstruction”第 2.4 节将 L0 扩展到 L1 以支持抽象机器中的一组事实。四个新指令put_variableput_valueget_variableget_value有参数XnAi,其含义不明确。描述只提到i参数索引Aii谓词的第-个参数位置。n来自哪里Xn?图 2.9 展示了一个为查询生成的代码示例p(Z,h(Z,W),f(W))。由于谓词p的元数为 3 并且第一条指令是put_variable X4, A1n因此不能是谓词的元数。