我遇到了以下问题:
?- f(X) = X.
X = f(X).
?- f(a) = a.
false.为什么统一适用于f(X) = X,而不适用于f(a) = a?是不是因为first只是简单地说f(X)的name返回值为X,而second试图检查f(a)的返回值是否为a?但是f()在这里没有定义!!另外,我猜在prolog中也没有“返回值”这样的概念。那么,这是怎么回事呢?
发布于 2021-02-23 15:16:54
在您的第一个示例中,X是一个变量(标识符以大写字母开头,请查看它)。一个自由变量可以与任何东西统一起来。(几乎所有的东西。你正在创建一个循环项,如果你试图“使用发生检查来统一”,这将不起作用)。
在第二个示例中,a是一个原子。它只与自由变量或自身统一。由于f(a)不是a,因此统一失败。
你说的对,没有“返回值”这回事。你可能会把一个目标的成功或失败看作是“返回值”,但我不知道这有多大帮助。
无论哪种方式,Prolog中都没有f()。这不是一个函数。你不需要定义它。这只是一个复合词(查查)。在某种程度上,它是一种数据结构。
https://stackoverflow.com/questions/66328584
复制相似问题