我对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为什么会发生错误?如何修改代码以实现相同的目标?谢谢你们帮助我!
发布于 2016-11-09 06:05:34
这不起作用的原因是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是如何联系在一起的。
https://stackoverflow.com/questions/40500184
复制相似问题