属性变量允许扩展统一。以下是关于界面的神秘细节。让我们直奔主题吧!
在sicstus-prolog
库(atts)中提供了使用属性变量的谓词。我想我得到了SICStus Prolog User's Manual page for library(atts)所说的内容,除了关于以下内容的一个细节verify_attributes(-Var, +Value, -Goals)
:
[...] verify_attributes/3 在 Var 实际绑定到 Value 之前被调用。如果失败,则认为统一失败。 它可能会不确定地成功,在这种情况下,统一可能会回溯以给出另一个答案。预计将在目标中返回在 Var 绑定到 Value 后要调用的目标列表。最后,在调用进球后,任何在 Var 上被阻止的进球都会被调用。
上面的句子(由我突出显示)让我很困惑——也很困惑:)
我一直认为统一是一个程序,可以:
使用最通用的统一器(模变量重命名)成功
或失败。
却无缘无故的成功?!
约束求解器的实现者何时使用过该“功能”?
我想不出一个用例……请帮忙!
编辑
实际上,我认为(我的)求解器代码中的不确定性是一个错误,而不是一个特性。因为任何不确定性都可以通过在 中返回一些析取来轻松模拟Goals
。