序言:为什么是 true == not(not(true)) -> false?

丹尼尔451

显然true = not(not(true))必须是错误的,因为=试图将原子true与术语统一not(not(true))(不评估术语),这是错误的,因为术语不相同。

但是,我认为==真的可以比较任何评估的内容。因此,我认为true == not(not(true))应该评估为true == true,就像(对于算术运算符)4 =:= 2 + 2评估为4 =:= 4并返回 true 一样。

...但这就是我在 SWI-Prolog 中得到的:

?- true == not(not(true)).
false.

我怎么了?

潜伏者

(==)/2比较任何评估它不评估其论点。只有当参数已经实例化为匹配项时它才会成功。

在 prolog 中,not(not(true))是一个复合词,它是not/1具有单个参数not(true)的词, 本身是not/1一个参数的词true/0,由没有参数的词组成它没有价值。除了在某些情况下,它甚至不会被“执行”。在 Prolog 中,not/1如果参数失败则谓词成功,如果参数成功则谓词失败。这不是价值功能结果,而是一种行为。这是假设它出现在如下上下文中:

not(not(true)),
write('This will be written out because not(not(true)) succeeded'), nl.

true == not(not(true))Prolog 中的表达式是一个复合术语,相当于:

'=='(true, not(not(true)))

在这种情况下,not(not(true))不进行评估。Prolog 将首先使用(==)/2等价运算符,如果其参数被实例化为相同的术语,则该运算符会成功。Prolog 中的术语true术语是否not(not(true))相同(或等效)?不,他们不是。一种是没有参数的简单术语 ( true/0)。另一个是复合术语:具有一个参数的术语本身就是具有一个参数的术语。因此(==)/2这里失败了。

请注意,这(=:=)/2是完全不同的。它是一个运算符,用于比较算术表达式的结果。参数必须是可计算的算术表达式,(=:=)/2如果它们的计算结果相同则会成功,否则会失败。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么“ True or False”比“ False或True”要快?

来自分类Dev

为什么false &&(false)?false:true返回true

来自分类Dev

为什么(false == 0)是TRUE?

来自分类Dev

布尔代数-为什么(True and False)True?

来自分类Dev

为什么lodash`_.all([true,true,true],true);`返回`false`?

来自分类Dev

为什么 print(False == True and not True) 返回 False?

来自分类Python

为什么“ [False,True]中的not(True)”返回False?

来自分类Dev

为什么 (true || false && false) 评估为 true?

来自分类Dev

为什么[False]中的False == False会返回True?

来自分类Python

为什么`True is False == False`,在Python中是False?

来自分类Python

为什么“ False is False is False”评估为“ True”?

来自分类Python

为什么“ False is False is False”评估为“ True”?

来自分类Python

为什么“ True == False is False”评估为False?

来自分类Dev

为什么{} == false评估为false,而[] == false评估为true?

来自分类Dev

结合布尔掩码,为什么在 Python 中:[False, True] 和 [True, False] == [True, False]

来自分类Dev

为什么strpos是!== false而不是true?

来自分类Python

为什么当[[]是[]]而'{}是{}'返回False时,'()是()'返回True?

来自分类Dev

我为什么要写!== false而不是== true?

来自分类Dev

为什么允许使用“ const true = false”?

来自分类Dev

为什么$ false -eq“”为true?

来自分类Dev

为什么从函数返回true或false?

来自分类Dev

为什么 "ǃ".isalpha() 是 True 而 "!".isalpha() 是 False?

来自分类Dev

为什么`(“” ||“ word”)== true`返回false?

来自分类Dev

为什么返回None而不是True或False?

来自分类Javascript

为什么(null == false)和(null == true)都返回false?

来自分类Dev

为什么在Javascript中,(!+ [] + [])为'true'和(false + [])为'false'?

来自分类Javascript

为什么“ true” == true在JavaScript中显示为false?

来自分类Dev

为什么要设置-e; true && false && true无法退出?

来自分类Dev

为什么“ [] == true”和“![] == true”都评估为false?

Related 相关文章

  1. 1

    为什么“ True or False”比“ False或True”要快?

  2. 2

    为什么false &&(false)?false:true返回true

  3. 3

    为什么(false == 0)是TRUE?

  4. 4

    布尔代数-为什么(True and False)True?

  5. 5

    为什么lodash`_.all([true,true,true],true);`返回`false`?

  6. 6

    为什么 print(False == True and not True) 返回 False?

  7. 7

    为什么“ [False,True]中的not(True)”返回False?

  8. 8

    为什么 (true || false && false) 评估为 true?

  9. 9

    为什么[False]中的False == False会返回True?

  10. 10

    为什么`True is False == False`,在Python中是False?

  11. 11

    为什么“ False is False is False”评估为“ True”?

  12. 12

    为什么“ False is False is False”评估为“ True”?

  13. 13

    为什么“ True == False is False”评估为False?

  14. 14

    为什么{} == false评估为false,而[] == false评估为true?

  15. 15

    结合布尔掩码,为什么在 Python 中:[False, True] 和 [True, False] == [True, False]

  16. 16

    为什么strpos是!== false而不是true?

  17. 17

    为什么当[[]是[]]而'{}是{}'返回False时,'()是()'返回True?

  18. 18

    我为什么要写!== false而不是== true?

  19. 19

    为什么允许使用“ const true = false”?

  20. 20

    为什么$ false -eq“”为true?

  21. 21

    为什么从函数返回true或false?

  22. 22

    为什么 "ǃ".isalpha() 是 True 而 "!".isalpha() 是 False?

  23. 23

    为什么`(“” ||“ word”)== true`返回false?

  24. 24

    为什么返回None而不是True或False?

  25. 25

    为什么(null == false)和(null == true)都返回false?

  26. 26

    为什么在Javascript中,(!+ [] + [])为'true'和(false + [])为'false'?

  27. 27

    为什么“ true” == true在JavaScript中显示为false?

  28. 28

    为什么要设置-e; true && false && true无法退出?

  29. 29

    为什么“ [] == true”和“![] == true”都评估为false?

热门标签

归档