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)