Prolog具有以下检查当前计算状态的功能:
var/1
:变量(@Term):“如果当前的术语是一个自由变量,则为真。”nonvar/1
:非变量(@Term):“如果当前的术语不是一个自由变量,则为真。”nonvar(X)
和\+var(X)
有什么区别吗?可能不会吧?
P.S.
来自ISO标准:
nonvar/1
:nonvar(X)
是真当且仅当X
不是集合V
(7.1.1)的成员。(临69)var/1
:var(X)
是真当且仅当X是V
的成员(7.1.1.)。(临67)在第27页:
7.1.1.可变 变量是集合V的成员(见6.1.2 a)。当目标正在执行时,统一可能导致变量与另一个术语统一。
这可能需要稍加修改,以引入"X是当前新/无约束/未精炼变量的名称“的概念。
发布于 2020-04-07 15:21:02
除了可能在简单Prolog系统上的性能上( \+ var(X)
比nonvar(X)
慢)之外,没有什么不同。
顺便说一句,有一个条款,例如:
a(X) :- \+ var(X).
Logtalk linter报告:
* Suspicious call: \+var(A) instead of nonvar(A)
https://stackoverflow.com/questions/61080917
复制相似问题