首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog =:=运算符

Prolog =:=运算符
EN

Stack Overflow用户
提问于 2009-09-13 08:59:38
回答 7查看 54.9K关注 0票数 35

在Prolog中有一些特殊的运算符,其中之一是is,然而,最近我遇到了=:=运算符,我对它的工作原理一无所知。

有人能解释一下这个运算符是做什么的吗?我在哪里可以找到这样的特殊运算符的预定义列表以及它们的作用?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-09-13 11:09:15

代码语言:javascript
复制
?- 2+3 =:= 6-1.
true.

?- 2+3 is 6-1.
false.

另请参阅文档http://www.swi-prolog.org/pldoc/man?predicate=is/2

票数 27
EN

Stack Overflow用户

发布于 2009-12-24 01:18:22

不过,我认为上面的答案值得在这里解释几句。

预先说明: Prolog中的算术表达式只是术语(“Prolog中的一切都是术语”),不会自动求值。(如果您有Lisp背景,请考虑引用列表)。所以3 + 4+(3,4)是一样的,它自己什么也不做。评估这些术语是单个谓词的责任。

几个内置的谓词执行隐式计算,其中包括算术比较运算符,如=:=is。虽然=:=计算这两个参数并比较结果,但is只接受并将其右参数作为算术表达式进行计算。

左边的参数必须是一个原子,或者是一个数值常量(然后与右边操作数的计算结果进行比较),或者是一个变量。如果它是一个绑定变量,则它的值必须是数值,并与前一种情况下的右操作数进行比较。如果它是一个未绑定的变量,则右操作数的计算结果将绑定到该变量。在后一种情况下,通常使用is来绑定变量。

从上面链接的Prolog字典中获取一个示例:要测试数字N是否为偶数,您可以使用这两个运算符:

代码语言:javascript
复制
0 is N mod 2  % true if N is even
0 =:= N mod 2 % dito

但是,如果您想要捕获操作的结果,则只能使用第一个变体。如果X未绑定,则:

代码语言:javascript
复制
X is N mod 2   % X will be 0 if N is even
X =:= N mod 2  % !will bomb with argument/instantiation error!

经验法则:如果你只需要算术比较,那就使用=:=。如果您想要捕获评估结果,请使用is

票数 100
EN

Stack Overflow用户

发布于 2009-09-13 09:02:12

我找到了我自己的答案,http://www.cse.unsw.edu.au/~billw/prologdict.html

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

https://stackoverflow.com/questions/1417253

复制
相关文章

相似问题

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