Prolog 当沃伦';是否执行抽象机器程序指令?

Prolog 当沃伦';是否执行抽象机器程序指令?,prolog,warren-abstract-machine,Prolog,Warren Abstract Machine,我在看书 第二章介绍了L0查询编译后L0程序的编译。程序编译部分(2.3)以以下内容开头: 编译一个程序术语p只是有点棘手,尽管不是通过 很注意,它假设查询?-q将构建一个术语 并将寄存器X1设置为包含其地址。因此 将q统一到p可以通过遵循已经存在的期限结构来进行 存在于X1中,只要它与p的结构相匹配 那么,在执行从查询编译中获得的指令后,进行程序编译?这有意义吗?我很困惑 对我来说有意义的是:从程序的注释语法树生成的WAM代码由解释器存储。对于每个过程(在程序中定义),存储WAM代码块。进行查

我在看书

第二章介绍了L0查询编译后L0程序的编译。程序编译部分(2.3)以以下内容开头:

编译一个程序术语p只是有点棘手,尽管不是通过 很注意,它假设查询
?-
q将构建一个术语 并将寄存器X1设置为包含其地址。因此 将q统一到p可以通过遵循已经存在的期限结构来进行 存在于X1中,只要它与p的结构相匹配

那么,在执行从查询编译中获得的指令后,进行程序编译?这有意义吗?我很困惑


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

请注意,您引用的是本文介绍的一系列日益复杂的虚拟机的开头部分:

我们考虑这里和LSCR;0,确实是一种非常简单的语言。在这种语言中,只能指定两种类型的实体:程序术语和查询术语。程序和查询都是一阶项,但不是变量。语义ℒ0只是 相当于计算程序和查询的最通用统一体

这种简单的语言是按照您的描述来解释的

在本书后面的章节中,更复杂机器的设计和执行在比例上变得更加复杂,几页之后我们发现,例如:

Inℳ编译后的代码存储在代码区
code
)中,这是一个可寻址的数据字数组,每个数据字包含一个可能标记的指令,该指令位于由操作码组成的一个或多个内存字上 后跟操作数

这已经是您在文章末尾描述的设计,当然,这就是实际的序言代码在实践中的编译方式

那么,在执行从查询编译中获得的指令后,进行程序编译?这有意义吗?我很困惑

在开头,这一点得到澄清(2,最后一段):

这个想法很简单:定义了一个程序术语p后,可以提交任何查询
?-
q,如果p和q不统一,执行要么失败,要么成功绑定q中的变量,通过将其与p统一得到

正如@mat已经指出的:这是一个循序渐进的方法。从非常简单的程序开始。只有一个基本事实和一个疑问