问题
什么是最高效的MGU算法?它的时间复杂度是多少?它是否简单到足以在Stack Overflow回答中描述?
我一直在Google上寻找答案,但只找到了通过ACM订阅才能访问的私人PDF。
我在SICP中找到了一个讨论: 这里
说明“最一般的统一算法”是什么:
e1 = (+ x? (* y? 3) 5) e2 = (+ z? q? r?)
然后,最通用的归一化器算法返回使两个表达式等价的最通用绑定集合。例如:
mgu(e1, e2) = { x ↦ z,
q ↦ (* y 3),
y ↦ unbound,
r ↦ 5 }
所谓“最一般”,是指你可以绑定{x ↦ 1}
和{z ↦ 1}
,这样也会使e1
和e2
等价,但这样会更加具体。
SICP文章似乎暗示这是相当昂贵的。
顺便提一下,我之所以问这个问题,是因为我知道类型推断也涉及到这个“合一”算法,我想理解它。