"nonvar(X)"和"\+var(X"之间有区别吗



Prolog具有以下功能来检查当前的计算状态:

  • var/1:var(@Term(:"如果Term当前是自由变量,则为True。">

  • nonvar/1:nonvar(@Term(:"如果Term当前不是自由变量,则为True。">

nonvar(X)+var(X)之间有什么区别吗?可能不会?

p.S.

来自ISO标准:

  • nonvar/1:nonvar(X)为真,当X不是集合V(7.1.1(的成员时。(p.69(
  • var/1:当X是V(7.1.1(的成员时,var(X)为真。(第67页(

第27页:

7.1.1.变量

变量是集合V的成员(见6.1.2 A(。当目标被执行时,统一可能导致一个变量与另一个术语统一。

这可能应该稍微重写一下,以引入"X是当前新鲜/无约束/未定义变量的名称"的概念。

除了在原始Prolog系统上的性能(+ var(X)nonvar(X)慢(之外,没有其他区别。

Btw,带有一个子句,例如:

a(X) :- + var(X).

Logtalk linter报道:

*     Suspicious call: +var(A) instead of nonvar(A)

最新更新