我想在序言中发现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.
任何人都可以帮我解决这个问题。
答案 0 :(得分:3)
您收到错误是因为您使用的是is / 2,它希望绑定参数。但是在您的示例查询中,参数D
,E
和P
是未绑定的变量,因此当您到达目标时,P
和T
也是未绑定的是/ 2。由于您已经在使用clpfd,请改用#= / 2:
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