【问题标题】:precedence of negation in SWI prologSWI序言中的否定优先级
【发布时间】:2018-12-19 18:53:52
【问题描述】:

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

:- 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中有含义吗?

【问题讨论】:

  • 您可以通过调用标准current_op/3谓词,通过回溯枚举Prolog系统中定义的所有运算符。
  • 相关,请参阅logic Logtalk 示例github.com/LogtalkDotOrg/logtalk3/tree/master/examples/logic
  • 标准 Prolog 没有定义运算符 &v。您看到的 /\ 运算符(我相信)用于算术表达式;通常的逻辑合取和析取运算符分别是,;,它们应该与Prolog 的否定\+ 匹配。 \ 中的算术有一个补码否定,但令人惊讶的是没有逻辑/布尔否定。
  • 不要重新定义已经存在的运算符,例如 >-。这将带来严重破坏。而是让自己的运营商。比如.> 代替> 等。
  • 这也会在一次练习中造成严重破坏。

标签: prolog negation iso-prolog


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2012-03-03
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多