我是Prolog新手。我写了一个很短的程序,如下所示:
plus(X,Y,R):- R is X+Y.
当我运行它时,我得到以下问题:
?- plus(1,1,2).
true
?- plus(1,1,X).
X=2
?- plus(1,X,2).
ERROR: is/2: Arguments are not sufficiently instantiated
为什么会出现错误?我如何修改代码来实现相同的目标?谢谢大家对我的帮助!
这不起作用的原因是is/2(像)一个函数。给定X,Y,它计算X+Y并将其存储到R(它用X+Y实例化R)。如果提供了R,并且X或Y是一个变量(尚未实例化),那么它如何计算X+Y,这就是实例化错误的原因。
要解决这个问题,您应该使用更相关的东西,如模块:CLPFD
:- use_module(library(clpfd)).
plus(X,Y,R):- R #= X+Y.
一些例子:
**?- [ask].
true.
?- plus(1,1,2).
true.
?- plus(1,1,X).
X = 2.
?- plus(1,X,2).
X = 1.
?- plus(X,Y,2).
X+Y#=2.
?- plus(X,Y,R).
X+Y#=R.**
在最后一个例子中,你可以看到它给出的答案是X,Y和R是如何相关的