问题描述
我想了解SICStus风格的可扩展统一。
User's Manual on library(atts)
指出:
Module:verify_attributes(-Var,+Value,-Goals)
钩子
...
verify_attributes/3
可以调用任意Prolog目标,但是Var
不应受其约束。绑定Var
将导致未定义的行为。
...
如果单个统一绑定多个属性变量,则首先所有此类绑定撤消,然后对每个相关变量执行以下操作:
到目前为止,我对以上内容提出了以下解释:
-
钩在
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.强制对 属性变量。”
错。