首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么Prolog不能识别这些内置的代码?

为什么Prolog不能识别这些内置的代码?
EN

Stack Overflow用户
提问于 2017-09-30 18:27:45
回答 1查看 408关注 0票数 1

我在使用SWI-Prolog中内置的round/1floor/1时遇到了问题。当在我的代码中使用它们时,它们不被识别,并且当它们作为查询提交时;例如?- round(1.6).,Prolog会告诉我该过程不被识别。我做错了什么吗?我在在线的Swish版本和我自己的windows安装版本上都试过了,但在这两个版本上都遇到了同样的错误。

EN

回答 1

Stack Overflow用户

发布于 2017-09-30 18:49:51

round/1 floor/1不是内置谓词, 和是

Prolog使用谓词。这意味着谓词只能是truefalse (或error)。此外,它还可以统一变量(进一步)。

因此,计算floor为1.6的唯一方法是使用两个变量,并将第二个变量设为第一个变量的底数。例如:

代码语言:javascript
运行
AI代码解释
复制
?- round(1.6,X).
X = 2.

?- floor(1.6,X).
X = 1.

因为以这种方式编写谓词有时会很麻烦。Prolog定义了一些函子,这些函子可以用is/2谓词来解释。round/1floor/1是在is/2谓词中具有语义的函数器:

代码语言:javascript
运行
AI代码解释
复制
?- X is round(1.6).
X = 2.

?- X is floor(1.6).
X = 1.

is还可以使用更高级的表达式树,例如:

代码语言:javascript
运行
AI代码解释
复制
?- X is floor(0.4+0.4+0.4).
X = 1.

但请注意,is实际上也是一个谓词。我们已经写过:

代码语言:javascript
运行
AI代码解释
复制
is(X, floor(0.4+0.4+0.4)).

在幕后,is/2谓词将调用floor/2。但是,请注意,您不能以这种方式简单地注入您自己的谓词。您不能简单地编写is(X, foo(2))并期望Prolog调用foo(2.X)

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

https://stackoverflow.com/questions/46505809

复制
相关文章

相似问题

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