如何解决为什么 `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 举报,一经查实,本站将立刻删除。