首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么`f(a)=a`失败,而`f(X)=X`在prolog中成功?

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

Stack Overflow用户
提问于 2021-02-23 15:08:25
回答 1查看 76关注 0票数 3

我遇到了以下问题:

代码语言:javascript
复制
?- 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中也没有“返回值”这样的概念。那么,这是怎么回事呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-23 15:16:54

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

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

你说的对,没有“返回值”这回事。你可能会把一个目标的成功或失败看作是“返回值”,但我不知道这有多大帮助。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66328584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档