_由:eraserhd_发表的评论
在 UNIFY-6 中有一个指示,我们预计这应该可以工作,尽管当前算法从未支持键中的变量。这是一个问题,因为它并没有统一类似键的值,而是依赖于具有相同键集合的两个映射具有相同的迭代顺序。这正是问题所在。
一个简单的修复方法将是恢复以前的行为——以前的行为是 O(n)(依赖于映射键的迭代是 O(n) 对于它们的当前顺序),简单的修复会使其变为类似于 O(n log_32 n) 对于映射。
一个更有趣的修复方法是添加对键中变量的支持。这是一件我认为很有价值(和有趣)。这将改变算法,因为集合的顺序缺失使得可能的统一变得多余,例如 (unify {:a 1, :b 2} {?x _, ?y _}) 有两个统一:{?x :a, ?y :b} 和 {?x :b, ?y :a},因此回溯(或类似的方法)变得必要。
正如在 UNIFY-8 中报告的那样,这个相同的机制可以被用于集合。
是否应该考虑“有趣的”修复,还是我应该直接进行“简单”的修复?