Пролог имеет следующее для проверки текущего состояния вычислений:
var/1: var (@Term) : "True, если Term в настоящее время является свободным переменная. "
var/1
nonvar/1: nonvar (@Term) :" Истина, если термин в настоящее время не является свободной переменной. "
nonvar/1
Есть ли какая-то разница между nonvar(X) и \+var(X)? Наверное, нет?
nonvar(X)
\+var(X)
PS
Из стандарта ISO:
nonvar/1: nonvar(X) верно, если X не является членом набора V (7.1.1). (стр.69) var/1: var(X) верно, если X является членом V (7.1.1.). (стр.67)
X
V
var(X)
На стр. 27:
7.1.1. Переменная Переменная является членом множества V (см. 6.1.2 a). В то время как цель выполняется, объединение может привести к объединению переменной с другим термином.
7.1.1. Переменная
Переменная является членом множества V (см. 6.1.2 a). В то время как цель выполняется, объединение может привести к объединению переменной с другим термином.
Вероятно, это следует немного переписать, чтобы внести идею "X - это имя свежего в настоящее время / неограниченная / неопределяемая переменная ".
Нет разницы, кроме возможной производительности в простой системе Prolog (при \+ var(X) медленнее, чем nonvar(X)).
\+ var(X)
Кстати, с таким предложением, как:
a(X) :- \+ var(X).
Отчеты Logtalk Linter:
* Suspicious call: \+var(A) instead of nonvar(A)