什么是Prolog中的#=

时间:2016-07-03 16:19:45

标签: prolog clpfd

某些网页上提到了运营商#=,例如https://www.metalevel.at/prolog但不是大多数其他网页,例如:http://www.swi-prolog.org/pldoc/man?section=operators

这个算子是什么意思?

1 个答案:

答案 0 :(得分:4)

运算符只是谓词的语法糖:如果你写X #= Y,它就是#=(X,Y)的缩写,所以查找谓词(#=)/2

SWI-Prolog documentation

中提到运算符作为谓词
  

算术表达式X等于Y。在推理整数时,将(is)/2替换为(#=)/2以获得更一般的关系。请参见声明性整数算术(第A.8.3节)。

它们是有限域上的约束逻辑编程(CLP(FD))包的一部分。 约束相对于(is)/2运算符的一个优点是它可以在多个方向上使用。例如:

?- use_module(library(clpfd)).
true.

?- 4 #= 2*Y.
Y = 2.

?- X #= 2*16.
X = 32.

此外,约束可能会延迟。例如:

?- X #= 2*Y, Y #= 14.
X = 28,
Y = 14.

有关更广泛的介绍,请阅读 this clpfd primer by @mat