在Prolog中有一些特殊的运算符,其中之一是is,然而,最近我遇到了=:=运算符,我对它的工作原理一无所知。
有人能解释一下这个运算符是做什么的吗?我在哪里可以找到这样的特殊运算符的预定义列表以及它们的作用?
发布于 2009-09-13 11:09:15
?- 2+3 =:= 6-1.
true.
?- 2+3 is 6-1.
false.另请参阅文档http://www.swi-prolog.org/pldoc/man?predicate=is/2
发布于 2009-12-24 01:18:22
不过,我认为上面的答案值得在这里解释几句。
预先说明: Prolog中的算术表达式只是术语(“Prolog中的一切都是术语”),不会自动求值。(如果您有Lisp背景,请考虑引用列表)。所以3 + 4和+(3,4)是一样的,它自己什么也不做。评估这些术语是单个谓词的责任。
几个内置的谓词执行隐式计算,其中包括算术比较运算符,如=:=和is。虽然=:=计算这两个参数并比较结果,但is只接受并将其右参数作为算术表达式进行计算。
左边的参数必须是一个原子,或者是一个数值常量(然后与右边操作数的计算结果进行比较),或者是一个变量。如果它是一个绑定变量,则它的值必须是数值,并与前一种情况下的右操作数进行比较。如果它是一个未绑定的变量,则右操作数的计算结果将绑定到该变量。在后一种情况下,通常使用is来绑定变量。
从上面链接的Prolog字典中获取一个示例:要测试数字N是否为偶数,您可以使用这两个运算符:
0 is N mod 2 % true if N is even
0 =:= N mod 2 % dito但是,如果您想要捕获操作的结果,则只能使用第一个变体。如果X未绑定,则:
X is N mod 2 % X will be 0 if N is even
X =:= N mod 2 % !will bomb with argument/instantiation error!经验法则:如果你只需要算术比较,那就使用=:=。如果您想要捕获评估结果,请使用is。
发布于 2009-09-13 09:02:12
我找到了我自己的答案,http://www.cse.unsw.edu.au/~billw/prologdict.html
https://stackoverflow.com/questions/1417253
复制相似问题