2

我想在序言中找到 a+1 的平方和 a 的平方是 2a+1 之间的区别。出于这个原因,我写了这样的代码:

:- use_module(library(clpfd)).

kare(X,Y):- Y #= X*X.

abc(A,B,F) :-
        kare(A,P),
        kare(B,T), 
        F is P-T.

我试过了

?- abc(D,E,P).

ERROR: is/2: Arguments are not sufficiently instantiated.

任何人都可以帮我解决这个问题。

4

1 回答 1

3

您收到错误是因为您使用的是 is/2,它期望参数被绑定。但是在您的示例中查询 arguments DE并且是未绑定的变量,P因此当您使用 is/2 达到目标时也是未绑定的。由于您已经在使用 clpfd,请改用 #=/2 :PT

abc(A,B,F) :-
   kare(A,P),
   kare(B,T),
   F #= P-T.    % <- here

这样您的查询就会产生结果:

   ?- abc(D,E,P).
D^2#=_A,
_A in 0..sup,
P+_B#=_A,
_B in 0..sup,
E^2#=_B
于 2016-05-21T10:21:26.197 回答