小编Orf*_*est的帖子

在Warren的抽象机中,如果其中一个参数是寄存器,绑定是如何工作的?

我正在尝试创建自己的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去登记册?

prolog unification warren-abstract-machine

5
推荐指数
1
解决办法
240
查看次数

哈斯克尔.更新O(1)中的单个Vector元素

我想编写一个更新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)

haskell vector

2
推荐指数
1
解决办法
1333
查看次数