为什么 `f(a)=a` 失败但 `f(X)=X` 在 prolog 中成功?

Why `f(a)=a` fails but `f(X)=X` succeeds in prolog?

我遇到了以下情况:

?- f(X) = X.
X = f(X).

?- f(a) = a.
false.

为什么统一适用于 f(X) = X,但不适用于 f(a) = a?是不是因为第一个简单地将 f(X) 的名称 return 值说成 X,而第二个尝试检查 f(a) 的 return 值是否是 a ?但是 f() 在这里是未定义的!!另外,我想,序言中没有“return 值”这样的概念。那么,这是怎么回事?

在您的第一个示例中,X 是一个变量(标识符以大写字母开头,请查找)。自由变量与任何东西统一。 (几乎任何东西。您正在创建一个循环项,如果您尝试“与发生检查统一”,这将不起作用,请查找)。

在你的第二个例子中,a 是一个原子。它只与自由变量或自身结合。由于 f(a) 不是 a,统一失败。

你说得对,没有“return 值”这样的东西。您可能会将目标的成功或失败视为“return 值”,但我不知道这有多大帮助。

无论哪种方式,Prolog 中都没有 f()。这不是一个功能。你不需要定义它。它只是一个复合术语(查找)。在某种程度上,它是一种数据结构。