某些网页上提到了运营商#=
,例如https://www.metalevel.at/prolog但不是大多数其他网页,例如:http://www.swi-prolog.org/pldoc/man?section=operators
这个算子是什么意思?
答案 0 :(得分:4)
运算符只是谓词的语法糖:如果你写X #= Y
,它就是#=(X,Y)
的缩写,所以查找谓词(#=)/2
。
算术表达式
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。