Prolog使用最通用的统一器而不仅仅是统一器,为什么会这样?
如果我没错,那么我认为,因为Prolog是基于回溯的,如果我们不使用大多数通用的统一者,那么我们会错过变量统一的某些组合吗?
最常用的统一者和统一者之间的差异显示结果术语何时仍包含变量.考虑大多数一般统一问题:
?- X = Y.
Run Code Online (Sandbox Code Playgroud)
具体的统一者是:
X = a, Y = a.
Run Code Online (Sandbox Code Playgroud)
但是也
X = 23, Y = 23.
Run Code Online (Sandbox Code Playgroud)
等等.
所以有很多这样的可能结果.但是,我们希望得到所有这些.这就是最通用的统一者所做的事情:
X = Y.
Run Code Online (Sandbox Code Playgroud)
要么
Y = X.
Run Code Online (Sandbox Code Playgroud)
它们中仍有两个,但如果上下文需要,可以忽略这种歧义,添加"重命名(变量)".