首页 > 解决方案 > SWI序言中的否定优先级

问题描述

这是来自 Blackburn 和 Bos 的书“自然语言的表示和推理”的引述。

:- 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 中是否~有意义?

标签: prolognegationiso-prolog

解决方案


注意,(\+)/1 是一个逻辑谓词(ISO 核心标准 7.8 控制结构,8.15 逻辑和控制),但 (/\)/2 是按位运算(ISO 核心标准 8.6 算术评估,9.4 位仿函数)在 (is)/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)使用。


推荐阅读