Prolog中的算术比较
假设我们有两个变量Prolog中的算术比较,prolog,arithmetic-expressions,Prolog,Arithmetic Expressions,假设我们有两个变量X和YX是53和Y是52。我想做的是通过将1添加到Y来比较它们,这样它将是53——因此X将等于Y+1 我试图通过简单地对Y变量使用相等运算符和加法来实现这一点,如下所示: X == Y + 1 尽管这看起来很简单,但结果是false。我缺少什么?为了计算表达式树,使用谓词: X is Y+1. 但是,您必须小心,这仅在X和Y都接地的情况下作为测试工作。如果右侧的变量(Y在本例中)未接地,则将始终出错 swipldemo: ?- X = 53, Y = 52, X is Y+
X
和Y
X
是53
和Y
是52
。我想做的是通过将1
添加到Y
来比较它们,这样它将是53
——因此X
将等于Y+1
我试图通过简单地对Y
变量使用相等运算符和加法来实现这一点,如下所示:
X == Y + 1
尽管这看起来很简单,但结果是
false
。我缺少什么?为了计算表达式树,使用谓词:
X is Y+1.
但是,您必须小心,这仅在X
和Y
都接地的情况下作为测试工作。如果右侧的变量(Y
在本例中)未接地,则将始终出错
swipl
demo:
?- X = 53, Y = 52, X is Y+1.
X = 53,
Y = 52.
?- X = 53, Y = 52, X is Y.
false.
?- X = 53, X is Y+1.
ERROR: is/2: Arguments are not sufficiently instantiated
?- Y = 52, X is Y+1.
Y = 52,
X = 53.
如果要对整数进行推理,请使用Prolog系统的CLP(FD)约束来比较和计算算术整数表达式 例如,在SICStus、SWI和YAP中,在
之后使用\u模块(库(clpfd)
:
这在各个方向都有效
其他例子:
?- X #= 52 + 1.
X = 53.
?- 53 #= Y + 1.
Y = 52.
?- 53 #= 52 + 1.
true.
正如您所看到的,()/2对双方都进行求值,(>)/2等也进行求值您确定这些变量是固定的吗?
?- X #= 52 + 1.
X = 53.
?- 53 #= Y + 1.
Y = 52.
?- 53 #= 52 + 1.
true.
?- X = 50+2, Y = 50+1, X =:= Y + 1.