我是Prolog的新手。我写了一个很短的程序如下:
package container.random.B;
import container.random.A.RandomA;
public class test
{
public static void main ( String [ ] args )
{
RandomA randomA = new RandomA ( );
randomA.setRandomAID ( 1 );
RandomB randomB = new RandomB ( randomA );
System.out.println ( randomB.getMyForeignRandom ( ).getRandomAID ( ) );
randomA.setRandomAID ( 2 );
System.out.println ( randomB.getMyForeignRandom ( ).getRandomAID ( ) );
}
}
当我运行它时,我遇到以下问题:
plus(X,Y,R):- R is X+Y.
为什么会发生错误?如何修改代码以实现相同的目标? 谢谢大家的帮助!!!
答案 0 :(得分:2)
这不起作用的原因是/ 2是(像)一个函数。给定X,Y,它计算X + Y并将其存储到R(它用X + Y实例化R)。如果提供了R并且X或Y是var(它尚未实例化)那么它如何计算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是如何相关的。