приоритет отрицания в прологе SWI - PullRequest
0 голосов
/ 19 декабря 2018

Вот цитата из книги Блэкберна и Бос "Представление и вывод для естественного языка".

:- op(900,yfx,>). % implication
:- op(850,yfx,v). % disjunction
:- op(800,yfx,&). % conjunction
:- op(750, fy,-). % negation 

Поскольку ожидаемое отрицание имеет более высокий приоритет, чем соединение.

Теперь смотрим на SWI Prolog документы

\+ - отрицание, поскольку сбой имеет приоритет ниже (900), чем /\ соединение (500).

Правильно ли я читаю?

Есть ли другой символ отрицания в SWI Prolog?Я знаю, что есть not, но он сохраняется только для обратной совместимости.

Добавление Имеет ли значение ~ в SWI Prolog?

1 Ответ

0 голосов
/ 29 декабря 2018

Будьте осторожны, (\ +) / 1 является логическим предикатом (основной стандарт ISO 7.8 Управляющие конструкции, 8.15 Логика и управление), но (/ \) / 2 является побитовой операцией (основной стандарт ISO 8.6 Арифметическая оценка, 9.4 побитовая обработкафункторы), который используется внутри (есть) / 2.Список будет:

 Logical Predicate       Bitwise Operation    Name
 (,)/2                   (/\)/2               Conjunction
 (;)/2                   (\/)/2               Disjunction
 (\+)/2                  (\)/1                Negation
 Etc..                   Etc..                Etc..

Примеры:

?- X is \ 1. /* Bitwise Negation */
X = -2.

?- 1 < 2, 1 > 0.  /* Logical Conjunction */
true.

Но так как (\ +) / 1 имеет слегка отличную семантику от классического отрицания, мы обычно называем это отрицание как неудачу.(~) / 1 используется CLP (B) .

...