【发布时间】:2021-02-23 10:20:19
【问题描述】:
我想了解 SICStus 风格的可扩展统一。
User's Manual on library(atts) 声明:
Module:verify_attributes(-Var, +Value, -Goals)钩子
...
verify_attributes/3可以调用任意 Prolog 目标,但Var不应受其约束。绑定Var将导致未定义的行为。
...
在单个统一绑定多个属性变量的情况下,首先将所有此类绑定撤消,然后对每个相关变量执行以下操作:
- 对于每个相关模块
M,调用M:verify_attributes/3,收集返回的Goals列表。- 变量绑定已重做。
- 任何
Goals都会被调用。- 在变量上被阻止的任何目标,现在已经被解除阻止,都会被调用。
到目前为止,我对上述内容提出了以下解释:
-
不同的
verify_attribute/3处理程序挂接到Var,查看Var的相同状态:都看到它“pre_unify”。 -
verify_attribute/3不能绑定Var,但它可以绑定其他属性变量。 -
这些绑定也将被延迟,以便处理程序不仅可以看到
Var的相同状态,还可以看到涉及的所有属性变量。 p>上面的动作列表需要“5.强制属性变量的任何延迟绑定。”
我是否朝着正确的方向前进——这是“完成,然后撤消,然后重做”的全部内容吗? 请帮忙!
【问题讨论】:
标签: prolog unification sicstus-prolog