微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 `f(a)=a` 失败而 `f(X)=X` 在序言中成功?

如何解决为什么 `f(a)=a` 失败而 `f(X)=X` 在序言中成功?

我遇到了以下问题:

?- 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()。这不是一个函数。你不需要定义它。它只是一个复合词(查一下)。从某种意义上说,它是一种数据结构。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。