统一算法实际上是如何工作的?

How does unification algorithm actually work?

我有这个 Prolog 代码:

bar(b).
bar(c).
baz(c).

这个查询:

bar(X), baz(X).

returns X = c

如果我有这个程序,有点不同:

bar(c).
bar(b).
baz(c).

关于同一个查询

bar(X), baz(X).

为什么会这样return

X = c;
false

Prolog 为回答查询而执行的计算可以表示为一棵树。 Prolog 使用 depth-first 策略 搜索此树,当它遇到失败节点时(或当用户按下键 ' ;' 以获得替代答案)。

在搜索过程中,子句按照它们在程序中声明的顺序使用(从第一个到最后一个)。

在搜索结束时,仅当树中 最后访问的节点失败节点[=35 时,Prolog 才显示 false =].

因此,要了解 Prolog 在两种情况下表现不同的原因,您可以比较 Prolog 在每种情况下探索的搜索树:

  • 第一种情况:

  • 第二种情况: