SICStus Prolog中的Verify_attributes

rep*_*eat 5 prolog sicstus-prolog clp

属性变量允许扩展统一性。以下是有关界面的奥秘细节。让我们开始追逐吧!

atts提供了使用属性变量的谓词。我想我得到SICStus Prolog用户手册页上关于库(atts)的内容,除了以下内容之外verify_attributes(-Var, +Value, -Goals)

[...]在Var实际绑定到Value之前,调用verify_attributes / 3。如果失败,则认为统一失败。 它可能不确定地成功,在这种情况下,统一可能会倒退以给出另一个答案。在“目标”中,期望返回将Var绑定到“值”后要调用的目标列表。最后,在调用目标之后,将调用在Var上被阻止的所有目标。

上面的句子(由我突出显示)使我感到困惑-还有很多:)

我一直认为统一是可以执行以下任一操作的过程:

  • 成功使用最通用的统一符(模变量重命名)

  • 或失败。

但是一定会成功吗?

约束求解程序的实现者何时才能使用该“功能”?

我想不出一个用例...请帮助!


编辑

实际上,我认为(我的)求解器代码中的不确定性是一个错误,而不是功能。对于任何不确定性,可以通过在中返回一些析取值轻松地进行模拟Goals