Prolog中的#=是什么意思?

Prolog中的#=是什么意思?,prolog,clpfd,Prolog,Clpfd,我最近在Prolog中看到一个使用谓词#=/2的程序。我查了一下他们给它下的定义 算术表达式X等于Y。在对整数进行推理时,将is/2替换为#=/2,以获得更一般的关系 关于这一点,我不理解的是,#=/2如何更“通用”,因为它只适用于整数。来自文档: 它们实现了整数表达式之间的纯关系,可以在所有方向上使用 举个例子: ?- X+3 #= X*2. X = 3. 看起来很简单,但实际上在传统的算术表达式求值中很难获得这样的结果 ?- X+3 is X*2. ERROR: is/2: Argumen

我最近在Prolog中看到一个使用谓词#=/2的程序。我查了一下他们给它下的定义

算术表达式X等于Y。在对整数进行推理时,将is/2替换为#=/2,以获得更一般的关系

关于这一点,我不理解的是,#=/2如何更“通用”,因为它只适用于整数。

来自文档:

它们实现了整数表达式之间的纯关系,可以在所有方向上使用

举个例子:

?- X+3 #= X*2.
X = 3.
看起来很简单,但实际上在传统的算术表达式求值中很难获得这样的结果

?- X+3 is X*2.
ERROR: is/2: Arguments are not sufficiently instantiated
从/2页,您可以看到签名

-Number is +Expr
其中
+Expr
表示它必须接地

此外,is/2的左参数实际上应该是原子的:

?- 3+3 is 3*2.
false.
尽管我们知道上述说法应该是正确的

注意:CLP(FD)这个名称有点“轻描淡写”,正如@false所指出的,可以命名为CLP(Z),因为域的有限性通常可以被放松