在Prolog中#=是什么意思?

时间:2016-04-03 06:51:12

标签: prolog clpfd

我最近在Prolog中使用谓词#= / 2看到了一个程序。我在the SWI prolog website上查看了它,并将其定义为

  

算术表达式X等于Y.当推理整数时,用#= / 2替换为/ 2以获得更一般的关系。

我对此无法理解的是#= / 2如何更加“通用”,因为整数只有

1 个答案:

答案 0 :(得分:6)

来自文档entry page

  

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

只是一个例子:

?- X+3 #= X*2.
X = 3.

看起来很简单,但实际上在传统的算术表达式评估中获得这样的结果相当困难。

?- X+3 is X*2.
ERROR: is/2: Arguments are not sufficiently instantiated

is / 2页面上,您可以看到签名

-Number is +Expr

其中+Expr表示必须接地。

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

?- 3+3 is 3*2.
false.

尽管我们知道,但上述陈述应该是真的......

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