我正在阅读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 代码块。进行查询时,会生成并执行其指令。如果查询正在调用已定义的过程,则执行其代码块。是这样的吗?