为了说明'is'和'='之间的区别,下一个例子在我的Prolog课程中给出:
?- X is 2+3
X = 5.
?- X = 2+3.
X = 2+3.
但是,Y is 3
和Y = 3
似乎都是这样做的。有区别吗?如果没有,是否有一个惯例不使用Prolog程序中的两个之一?
答案 0 :(得分:3)
在Prolog中,=/2
和is/2
用于非常不同的目的。 is/2
用于从算术表达式中分配值。右侧必须完全实例化(所有变量绑定),它将计算表达式并将其与左侧的单个变量统一。例如:
Y = 3,
X is log(Y+7)/2.
X = 1.151292546497023
Y = 3
=
用于统一=
两侧的字词。所以当你说:
X = log(Y+7)/2.
这会将术语X
与术语log(Y+7)/2
(或技术上为'/'(log('+'(Y,7),2)
)统一,从而为您提供X = log(Y+7)/2
。它不会计算log(Y+7)/2.
,因为这不是=
的工作。这是is/2
的工作。
使用=
,你也可以这样说:
foo(X, _) = foo(3, blah).
您将获得X = 3
,因为它可以通过将X
设置为3
来统一这两个字词。
在最简单的情况下,这些运算符看起来是相同的,因为X is 3
计算表达式3
并将其赋值(绑定到)X
,并且X = 3
统一X
3
{{1}}。在这种情况下,两种结果都是相同的。