create_mutable/2 在 SICStus Prolog 中

create_mutable/2 in SICStus Prolog

mutable terms 上的 SICStus Prolog 手册页指出:

[...] the effect of unifying two mutables is undefined.

那么,为什么create_mutable(data,x)会失败呢?

难道不应该提出 uninstantiation_error 吗?

我想不出上述情况 不是 无意的编程错误(Xx)...请帮忙!

对 "Why does create_mutable/2 not throw an exception when output unification fails?" 的简短回答只是:因为当该功能被添加到 SICStus Prolog 时就是这样做的,并且没有人提出改变它的有力理由。

一个重要的 "difference between the stream created by open/4 and the mutable term created by create_mutable/2" 是 open/4 有副作用,如果对 open/4 的调用的输出统一失败,这些副作用是无法消除的。

从这个意义上说,create_mutable/2 有点像 is/2 如果输出参数是一些非数字的非变量项,它也会悄悄地失败,例如在 x is 3+4。这似乎是在 Prolog 中处理输出参数的常见和传统方式。

我同意将非变量作为第二个参数很可能是编程错误。下一版本的 SICStus IDE、SPIDER 将对此发出警告(因为它已经对 is/2 发出警告)。

None 这个,也不是问题中的例子,似乎与引用的文档直接相关“[...] 统一两个可变变量的效果 [...]”。