扩展统一,SICStus 风格

Posted

技术标签:

【中文标题】扩展统一,SICStus 风格【英文标题】:Extending unification, SICStus-style 【发布时间】: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.强制属性变量的任何延迟绑定。”

我是否朝着正确的方向前进——是“完成,然后撤消,然后重做”的全部内容吗? 请帮忙!

【问题讨论】:

【参考方案1】:

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

不同的verify_attribute/3 处理程序连接到Var,见相同 Var 的状态:所有人都看到它“pre_unify”。

没错。

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

没错。

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

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

上面的动作列表需要“5.强制任何延迟绑定 属性变量。”

错了。

【讨论】:

很高兴看到你回答。 非常感谢!我现在看到的方式在我的实现中不需要“撤消然后重做”部分(它只处理有限树)。你觉得这听起来合理吗?

以上是关于扩展统一,SICStus 风格的主要内容,如果未能解决你的问题,请参考以下文章

RESTful风格以及统一响应结果

我为什么推荐Prettier来统一代码风格

多人协作项目如何保持代码风格统一

spring boot 2 全局统一返回RESTful风格数据统一异常处理

Qt之使用CQU库快速开发统一风格界面

SpringBoot2.0统一返回Rest风格数据结构与统一异常处理