序言:为什么是 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

(true + false)> 2 + true; 为什么返回false?

来自分类Dev

为什么(false和false或true)返回true

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么`false && true || true`评估为true?

来自分类Dev

为什么mysql评估(TRUE或TRUE和FALSE)为true?

来自分类Dev

FALSE和TRUE的奇怪定义,为什么?

来自分类Dev

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

来自分类Dev

为什么新的Boolean(false)为true?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

为什么JS中的true =='true'语句返回false?

来自分类Dev

为什么`[] == false`是true,而只是`[]`评估为true?

来自分类Dev

如果([[] == false)为true,为什么[[] || true)导致[]?

来自分类Dev

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

来自分类Dev

当 {a statement that is equal to True} == True 评估为 false 时,为什么 True == True 评估为 True?

来自分类Dev

如果1 =='1'// true和1 == true // true,那么为什么1 =='true'// false

来自分类Dev

相同的RegExp交替返回true和false。为什么?

来自分类Dev

为什么“ [[['>'>'0']]”返回false,而“ [['>'\>'0']”却返回true?

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

    (true + false)> 2 + true; 为什么返回false?

  6. 6

    为什么(false和false或true)返回true

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

    为什么`false && true || true`评估为true?

  12. 12

    为什么mysql评估(TRUE或TRUE和FALSE)为true?

  13. 13

    FALSE和TRUE的奇怪定义,为什么?

  14. 14

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

  15. 15

    为什么新的Boolean(false)为true?

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

    为什么JS中的true =='true'语句返回false?

  23. 23

    为什么`[] == false`是true,而只是`[]`评估为true?

  24. 24

    如果([[] == false)为true,为什么[[] || true)导致[]?

  25. 25

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

  26. 26

    当 {a statement that is equal to True} == True 评估为 false 时,为什么 True == True 评估为 True?

  27. 27

    如果1 =='1'// true和1 == true // true,那么为什么1 =='true'// false

  28. 28

    相同的RegExp交替返回true和false。为什么?

  29. 29

    为什么“ [[['>'>'0']]”返回false,而“ [['>'\>'0']”却返回true?

热门标签

归档