学习序言 - 获取错误 { >/2:参数未充分实例化。}

Learning prolog - Getting error { >/2: Arguments are not sufficiently instantiated.}

Nrs_Between(X,Y,Nr) :-
    Z>X,
    Z<Y,
    Nr is Z.

------------------------*---------------- ----------

?- Nrs_Between(1,10,X).

等待输出:

Z = 2;
Z = 3;
etc

获取输出:

>/2: Arguments are not sufficiently instantiated.

------------------------*---------------- ----------

有人吗?

</2>/2 都计算算术表达式。他们不接受自由变量。

经典解决方案:使用between/3.

?- between(1, 3, X).
X = 1 ;
X = 2 ;
X = 3.

另一种选择:使用CLP(FD)

?- X #>= 1, X #=< 3, label([X]).
X = 1 ;
X = 2 ;
X = 3.