SWI序言中否定的优先顺序

时间:2018-12-19 18:53:52

标签: prolog negation iso-prolog

这里引用了布莱克本和博斯的著作《自然语言的表示与推理》。

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

如预期的否定比连词具有更高的优先级。

现在查看SWI Prolog docs

\+-否定,因为失败的优先级(900)比/\连词(500)低。

我阅读正确吗?

SWI Prolog中还有否定符号吗?我知道有not,但仅保留它是为了向后兼容。

添加 ~在SWI Prolog中是否有意义?

1 个答案:

答案 0 :(得分:3)

请注意,(\ +)/ 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)使用。