在为变量赋值时,Prolog的最佳实践是什么?

时间:2013-11-23 14:28:08

标签: prolog

为了说明'is'和'='之间的区别,下一个例子在我的Prolog课程中给出:

?- X is 2+3
X = 5.

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

但是,Y is 3Y = 3似乎都是这样做的。有区别吗?如果没有,是否有一个惯例不使用Prolog程序中的两个之一?

1 个答案:

答案 0 :(得分:3)

在Prolog中,=/2is/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}}。在这种情况下,两种结果都是相同的。