Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SWI-prolog中否定的优先级_Prolog_Negation_Iso Prolog - Fatal编程技术网

SWI-prolog中否定的优先级

SWI-prolog中否定的优先级,prolog,negation,iso-prolog,Prolog,Negation,Iso Prolog,这里引用布莱克本和博斯的著作《自然语言的表示和推理》 正如所料,否定比连词具有更高的优先级 现在来看SWI Prolog \+-失败时的否定优先级(900)低于连接(500) 我读对了吗 在SWI Prolog中是否还有另一个表示否定的符号?我知道有而不是,但它只是为了向后兼容而保留的 加法在SWI Prolog中有意义吗?小心,(\+)/1是一个逻辑谓词(ISO核心标准7.8控件构造,8.15逻辑和控件),但(/\)/2是一个位运算(ISO核心标准8.6算术求值,9.4位函子),在(is)/2

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

正如所料,否定比连词具有更高的优先级

现在来看SWI Prolog

\+
-失败时的否定优先级(900)低于连接(500)

我读对了吗

在SWI Prolog中是否还有另一个表示否定的符号?我知道有
而不是
,但它只是为了向后兼容而保留的

加法在SWI 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.
?-X是\1./*位反运算*/
X=-2。
?- 1 < 2, 1 > 0.  /* 逻辑连词*/
对。

但由于(+\+)/1的语义与经典否定略有不同,我们通常将其称为否定失败。(~)/1由使用。

通过回溯,您可以通过调用标准
当前\u op/3
谓词来枚举Prolog系统中定义的所有运算符。相关信息,请参阅标准Prolog中的
逻辑
日志对话示例不定义运算符
&
v
。您看到的/\运算符(我相信)用于算术表达式;常用的逻辑合取和析取运算符有
,应该与Prolog的否定匹配
\+
。在\中,算术有一个1补码否定,但令人惊讶的是,没有逻辑/布尔否定。不要重新定义已经存在的运算符,如
-
。这将导致大破坏。而是让你自己操作。就像用
>
代替
等。这也会在一次练习中造成严重破坏。
?- X is \ 1. /* Bitwise Negation */
X = -2.

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