Prolog 在沃伦';s抽象机器,如果其中一个参数是寄存器,绑定如何工作?
我正在尝试创建我自己的WAM实现,但我在 我无法理解如何执行图2.4中的指令Prolog 在沃伦';s抽象机器,如果其中一个参数是寄存器,绑定如何工作?,prolog,unification,warren-abstract-machine,Prolog,Unification,Warren Abstract Machine,我正在尝试创建我自己的WAM实现,但我在 我无法理解如何执行图2.4中的指令unified_value X4 据我所知,这条指令应该将程序中的Y与查询中的f(W)统一起来 unify\u value X4调用unify(X4,S)其中S=2(见图2.1),相应的堆单元为“REF 2”,X4为“STR 5” Unify(图2.7)应该bind这些值,但我不知道如何deref寄存器 “REF 2”在堆中,“STR 5”在寄存器中。如何将某个东西绑定到寄存器?我们谈论的是沃伦的“新”引擎WAM,而不是
unified_value X4
据我所知,这条指令应该将程序中的Y与查询中的f(W)统一起来
unify\u value X4
调用unify(X4,S)
其中S=2(见图2.1),相应的堆单元为“REF 2”,X4为“STR 5”
Unify
(图2.7)应该bind
这些值,但我不知道如何deref
寄存器
“REF 2”在堆中,“STR 5”在寄存器中。如何将某个东西绑定到寄存器?我们谈论的是沃伦的“新”引擎WAM,而不是旧引擎PLM 在WAM中,变量分配在两个位置
a(S0,S) :- b(S0,S1), c(S1,S).
并使用命令pl2wam
编译为:
predicate(a/2,1,static,private,monofile,global,[
allocate(2),
get_variable(y(0),1), % S
put_variable(y(1),1), % S1
call(b/2),
put_unsafe_value(y(1),0), % S1
put_value(y(0),1), % S
deallocate,
execute(c/2)]).
谓词(a/2,1、静态、专用、单文件、全局、[
分配(2),
获取变量(y(0),1),%S
put_变量(y(1),1),%S1
电话(b/2),
放置不安全值(y(1),0),%S1
放置值(y(0),1),%S
解除分配,
执行(c/2)])。
谢谢你写得这么好。如果你正在执行你自己的WAM,考虑使用而不是原来的,过于复杂的三指针类型方案。 predicate(a/2,1,static,private,monofile,global,[ allocate(2), get_variable(y(0),1), % S put_variable(y(1),1), % S1 call(b/2), put_unsafe_value(y(1),0), % S1 put_value(y(0),1), % S deallocate, execute(c/2)]).