作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遇到了以下情况:
?- 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()
。这不是一个功能。你不需要定义它。它只是一个复合术语(查找)。在某种程度上,它是一种数据结构。
关于prolog - 为什么 `f(a)=a` 失败但 `f(X)=X` 在序言中成功?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66328584/
我是一名优秀的程序员,十分优秀!