我正在尝试创建自己的WAM实现,我坚持练习2.4
我无法理解如何执行unify_value X4
图2.4中的指令.
据我所知,该指令应该从查询中用程序中的f(W)统一Y.
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
去登记册?
我想编写一个更新O(1)中单个向量元素的函数:
Vector Integer -> Int -> Integer -> Vector Integer
upd v ind x
Run Code Online (Sandbox Code Playgroud)
更新复制整个向量的值很容易:
upd v ind x = v // [(ind,x)]
Run Code Online (Sandbox Code Playgroud)
但那太慢了.
我创建一个矢量,Data.Vector.Generic.fromList
而不是冻结它.
如要修改的地方矢量我发现功能
Data.Vector.modify
,Data.Vector.Mutable.write
以及Data.Vector.Mutable.unsafeWrite
,但我无法弄清楚如何使用它们.
当我尝试这个:
upd v ind x = do DVM.write v ind x
Run Code Online (Sandbox Code Playgroud)
编译器抱怨:
Couldn't match type `()' with `Integer'
Expected type: DV.Vector Integer
Actual type: DV.Vector ()
In the return type of a call of `DVM.write'
In a stmt of a 'do' block: DVM.write v ind x …
Run Code Online (Sandbox Code Playgroud)