Prolog 序言-查找0以上的任何数字

Prolog 序言-查找0以上的任何数字,prolog,Prolog,我对这个序言错误感到有点惊讶。对于p(X):-X>0: ?- p(X). ERROR: Arguments are not sufficiently instantiated 我假设这会将X统一为大于0的某个值 有人能解释一下为什么我的直觉会偏离这里吗 通常,在prolog中使用算术,但您可以使用类似于来自同一源代码的以下代码片段: better_add(X,Y,S) :- not(var(X)), not(var(Y)), not(var(S)), Z is X + Y, Z=S. be

我对这个序言错误感到有点惊讶。对于
p(X):-X>0

?- p(X).
ERROR: Arguments are not sufficiently instantiated
我假设这会将X统一为大于0的某个值


有人能解释一下为什么我的直觉会偏离这里吗

通常,在prolog中使用算术,但您可以使用类似于来自同一源代码的以下代码片段:

better_add(X,Y,S) :- not(var(X)), not(var(Y)), not(var(S)),
  Z is X + Y, Z=S.
better_add(X,Y,S) :- not(var(X)), not(var(Y)), var(S),
  S is X + Y.
better_add(X,Y,S) :- not(var(X)), var(Y), not(var(S)),
  Y is S - X.
better_add(X,Y,S) :- var(X), not(var(Y)), not(var(S)),
  X is S - Y.

这是因为X必须是函数或数字才能使用>/2: