问题描述
我遇到了以下问题:
?- f(X) = X.
X = f(X).
?- f(a) = a.
false.
为什么统一适用于f(X) = X
,而不适用于f(a) = a
?是因为第一个简单地将 f(X)
的名称返回值表示为 X
,而第二个尝试检查 f(a)
的返回值是否为 a
?但是 f()
在这里是未定义的!!另外,我想,序言中没有“返回值”这样的概念。那么,这里发生了什么?
解决方法
在您的第一个示例中,X
是一个变量(标识符以大写字母开头,请查找)。自由变量与任何事物统一。 (几乎任何事情。您正在创建一个循环项,如果您尝试“与发生的检查统一”,请查找它,这将不起作用)。
在您的第二个示例中,a
是一个原子。它只与自由变量或自身统一。由于 f(a)
不是 a
,因此统一失败。
您说得对,没有“返回值”这样的东西。您可能会将目标的成功或失败视为“返回值”,但我不知道这有多大帮助。
无论如何,Prolog 中都没有 f()
。这不是一个函数。你不需要定义它。它只是一个复合词(查一下)。从某种意义上说,它是一种数据结构。