如何否定析取



我对 ruby 中的枚举器#拒绝有点困惑。请考虑以下代码:

(1..10).select {|i| i % 3 == 0 || i % 5 == 0 } => [3, 5, 6, 9, 10]

下面一行不应该是等效的吗?

(1..10).reject {|i| i % 3 != 0 || i % 5 != 0 } => []

如果我只在拒绝方法上使用一个条件,结果是预期的。 但是如果我包括 OR 运算符,结果结果为空。有人可以为我澄清这一点。

(1..10).reject {|i| i % 3 != 0} => [3, 6, 9]

你犯了一个基本的逻辑错误:

!(A || B)等同于!A && !B,不等同于!A || !B

因此,如果您将第二个示例中的||更改为 && ,那么您的第二个示例将给出与第一个示例相同的结果:

(1..10).reject {|i| i % 3 != 0 && i % 5 != 0 } # => [3, 5, 6, 9, 10]

你遇到了德摩根定律之一。

p 和 q = 不是(

(不是 p( 或   (不是q((
p 或   q = Not((不是 p( 和 (不是 q ((

它很接近,但你忘了更换操作员。

在第二段代码中,您更改了相等性,因此您需要将||更改为 &&

(1..10).reject {|i| i % 3 != 0 && i % 5 != 0 } => [3, 5, 6, 9, 10]

相关内容

  • 没有找到相关文章

最新更新