Есть ли разница между `nonvar (X)` и `\ + var (X)`? - PullRequest
1 голос
/ 07 апреля 2020

Пролог имеет следующее для проверки текущего состояния вычислений:

  • var/1: var (@Term) : "True, если Term в настоящее время является свободным переменная. "

  • nonvar/1: nonvar (@Term) :" Истина, если термин в настоящее время не является свободной переменной. "

Есть ли какая-то разница между 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)

На стр. 27:

7.1.1. Переменная

Переменная является членом множества V (см. 6.1.2 a). В то время как цель выполняется, объединение может привести к объединению переменной с другим термином.

Вероятно, это следует немного переписать, чтобы внести идею "X - это имя свежего в настоящее время / неограниченная / неопределяемая переменная ".

1 Ответ

1 голос
/ 07 апреля 2020

Нет разницы, кроме возможной производительности в простой системе Prolog (при \+ var(X) медленнее, чем nonvar(X)).

Кстати, с таким предложением, как:

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

Отчеты Logtalk Linter:

*     Suspicious call: \+var(A) instead of nonvar(A)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...