问题
什么是最有效的 MGU 算法?它的时间复杂度是多少?在堆栈溢出答案中描述是否足够简单?
我一直试图在 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}
and{z ↦ 1}
并且这也可以使e1
和e2
等效,但它会更具体。
SICP 文章似乎暗示它相当昂贵。
对于信息,我问的原因是因为我知道类型推断也涉及这种“统一”算法,我想了解它。