while循环中逻辑语句AND和OR的澄清



ANDOR语句在while循环中表现异常

var a = 0;
var b = 0;
while (a < 3 && b < 3) {
if (a < 3) {
a = a + 1
console.log(a)
console.log("Ende")
} else if (b < 3) {
b = b + 1;
console.log(b);
}
}

现在,您可以预期while循环将完成其工作,直到AND语句中的两个变量都达到3。然而,事实并非如此,它一直工作到a达到3,然后停止。

为什么?如果您将其更改为OR运算符,它不会停止,直到两个变量都达到3。为什么?

实际上,行为在数学上是正确的。不幸的是,英语有时会使andor歧义。

考虑条件:

a < 3 && b < 3

你对英语的直觉让你思考:

现在,您可以预期while循环将完成其工作,直到两个变量都达到3

但这是错误的。只要两个变量都小于3,该条件就会起作用。这显然意味着,如果任何一个变量达到3,则条件为假。事实上,即使在英语语法中也是如此,但由于AND和OR的常见用法(在逻辑上是不正确的(与列表的相互作用,这一点变得模糊不清。

首先让我们考虑正确的用法:

a < 3 && b < 3——这意味着

  • 两个条件都必须为真(AND的定义(
    • a不得达到3
    • b不得达到3

因此,真值表为:

a        b        result
-----------------------------
< 3      < 3        true
3++      < 3        false  // AND requires both to be true
< 3      3++        false  // however OR only requires one to be true
3++      3++        false

一旦你写下AND的真值表,你就会明白为什么如果任何一个变量达到3,它就必须停止循环。


现在让我们看看英语是如何混淆事物的。我想指出的是,严格来说,英语语法与AND和OR的数学定义一致,但尽管每个人都能直观地理解其含义,但通常的用法在技术上是错误的(每个人都神奇地忽略了逻辑(。

在英语中,如果我们有一个列表,其中我们想要列表中的所有内容(如购物列表(,我们使用and加入列表:

I want an orange, an apple AND a banana

上面的句子要求一个人购买所有三种水果。

另一方面,如果我们有一个选项列表,我们用or:将其加入

You can either walk OR drive there

严格地说,实际的规则是,如果你希望列表的所有部分都是真/存在的,那么你用AND来连接它,如果你只需要列表的至少一部分为真/存在,那么你就用OR来连接它。但英语使用者并不是这样解释AND和OR的。我们非正式地使用前面的定义,即想要所有东西或想要某些东西。

当涉及否定时,这种微妙的差异就成为了一个主要问题(小于也会触发它(。我们非正式地理解以下内容:

I don't want apples, I don't want oranges AND I don't want bananas

就像——如果有一个苹果、一个橙子和一根香蕉,那么上面的人不会高兴。但正确的解释是,即使我们没有给他橘子和香蕉,如果给他一个苹果,他也不会高兴。这是因为他一个都不想要,他没有说他只是不想把三种水果都放在一起,但不介意只吃一根香蕉。

现在让我们考虑以下内容:

I don't want an apple and an orange.

乍一看,它和上面的句子一样,只是更短。然而,从逻辑上讲,这是有区别的。在这种情况下,这个人说他不想要一个带橙子的苹果,但可能可以不带橙子。

"与"one_answers"或"在列表中的行为听起来相似,但含义却截然不同。它实际上在布尔代数中有一个定理,叫做德摩根定理。事实上,这是显而易见的,但乍一看却并非如此。

它指出:

( NOT A ) AND ( NOT B ) is the same as NOT ( A OR B )

( NOT A ) OR ( NOT B )  is the same as NOT ( A AND B )

这就是为什么有时当AND不能像你想象的那样工作时,将其更改为OR会突然起作用。

相关内容

  • 没有找到相关文章

最新更新