我最近在Prolog中使用谓词#= / 2看到了一个程序。我在the SWI prolog website上查看了它,并将其定义为
算术表达式X等于Y.当推理整数时,用#= / 2替换为/ 2以获得更一般的关系。
我对此无法理解的是#= / 2如何更加“通用”,因为整数只有 。
答案 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),因为域的有限性通常可以放宽。