【发布时间】:2011-10-26 13:39:51
【问题描述】:
law of non-contradiction 规定两个相互矛盾的陈述不能同时为真。这意味着表达式
(a && !a)
(a == !a)
(a === !a)
应该总是评估为假值,并且
(a || !a)
应始终评估为真实值。
幸运的是,Javascript 是一种有趣的语言,allows you to doall sorts ofsick things。我向某人打赌,有可能说服 Javascript 违反不矛盾定律,或者至少令人信服地让它看起来违反了不矛盾定律。现在我正在尝试让上述所有四个代码示例都给出意想不到的结果。
什么是解决这个问题的好方法?
【问题讨论】:
-
@djhaskin 这听起来像是一个只喜欢实用程序的程序员会问的问题。
-
您可以在 C++ 中定义一个类并重载 && 以始终返回 true。没有?
-
@Patrick,是的,在 C 中,但 Javascript 没有运算符重载。
-
哦,你的意思是 JavaScript。明白了。
-
这是一个有趣的三值逻辑练习:
(!(((0/0) && !(0/0)) == false) && !(((0/0) && !(0/0)) == true)) === true。换句话说,(0/0) && !(0/0)是一个ast!(a==false) && !(a==true)。与===一样有效。不会像你问的那样破坏逻辑,但仍然......
标签: javascript logic