微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

扩展统一的SICStus风格 Module:verify_attributes(-Var, +Value, -Goals)钩子

如何解决扩展统一的SICStus风格 Module:verify_attributes(-Var, +Value, -Goals)钩子

我想了解SICStus风格的可扩展统一。 User's Manual on library(atts)指出:

Module:verify_attributes(-Var,+Value,-Goals)钩子

...
verify_attributes/3可以调用任意Prolog目标,但是Var不应受其约束。绑定Var将导致未定义的行为。
...
如果单个统一绑定多个属性变量,则首先所有此类绑定撤消,然后对每个相关变量执行以下操作:

  1. 对于每个相关模块M,将调用M:verify_attributes/3,并收集返回的Goals的列表。
  2. 重做变量绑定。
  3. 任何Goals都会被呼叫。
  4. 该变量上已被解除阻塞的任何目标都将被调用

到目前为止,我对以上内容提出了以下解释:

  • 钩在verify_attribute/3上的不同Var处理程序中,看到的状态与Var相同:所有人都将其视为“ pre_unify”。

  • verify_attribute/3不能绑定Var,但可以绑定 other 属性变量。

  • 这些绑定也将被延迟,以使处理程序不仅看到Var的相同状态,而且看到所有的状态涉及的变量。

    动作列表上方包含“ 5.强制延迟属性变量的任何绑定。”

我朝着正确的方向前进吗-这是完成,然后撤消,然后重做的全部内容吗? 请帮助!

解决方法

该机制最初由Christian Holzbaur设计,并由您真正实施。回覆。您的解释:

钩在verify_attribute/3上的不同Var处理程序中,看到的是相同的 状态为Var:所有人都将其视为“ pre_unify”。

对。

verify_attribute/3不能绑定Var,但可以绑定其他 属性变量。

对。

这些绑定也将被延迟,以便处理程序不仅 看到Var的相同状态,但是涉及到的所有属性变量。

错了。如果它绑定了其他属性变量,则对这些变量递归调用整个扩展的统一机制。

在上述动作列表中,需要“ 5.强制对 属性变量。”

错。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。