Prolog ERROR: is/2:参数没有充分实例化



我是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是如何相关的

最新更新