【问题标题】:Difference between OR and AND?OR和AND之间的区别?
【发布时间】:2012-03-02 13:56:16
【问题描述】:

我正在为 WQL 查询创建一个表达式,以便在既没有版本 1 也没有版本 2 的计算机上定位软件部署。

我提出了两个似乎具有相同结果的表达式,并想对您运行此逻辑以查看这些表达式是否真的等价?如果是这样,我可能会选择表达式 1。

表达式 1:

如果机器在“Group1”中,则将 Software.version1 部署到机器并且 机器不是 Software.version1 并且机器不是 Software.version2

表达式 2:

如果机器在“Group1”中并且( 机器不是 Software.version1 或机器不是 Software.version2)

我的大脑开始受伤了。

非常感谢

【问题讨论】:

  • 既不是版本 1 也不是版本 2。考虑一下。

标签: boolean-logic


【解决方案1】:

在表达式 1 中,所有三个条件都必须为真(机器在组 1 中,而不是版本 1 和版本 2)。在表达式 2 中,两个条件必须为真:机器在组 1 中但不是版本 1,或者机器是组 1 而不是版本 2。

假设机器不能同时具有版本 1 和版本 2,如果机器在组 1 中,第二个表达式将始终为真。只有当机器在组中时,第一个表达式才为真1 并且既没有版本 1 也没有版本 2。

从逻辑上讲,你有:

exp1 = g1 ∧ ~v1 ∧ ~v2

exp2 = g1 ∧ (~v1 ∨ ~v2)
     = g1 ∧ ~(v1 ∧ v2)   // by DeMorgan's theorem

所以答案是不,这两个表达式不等价。如果你不明白为什么,写出所有三个条件和两个表达式的真值表。

【讨论】:

  • 是的。可以公平地假设一台机器不会同时拥有两个软件版本。
  • 软件包需要部署到没有软件包(version1)或更高版本的软件包(version2)的机器上。实际上,只有在您两者都没有的情况下才应该部署它。当我运行逻辑时,两个表达式都给了我想要的结果....我认为....也就是说,将软件版本 1 部署到已经有版本 1 或版本 2 的机器没有风险?
  • 再读一遍我写的。使用您的第二个表达式,该包将部署到没有 both 版本 1 版本 2 的每台第 1 组机器。如果只能安装一个版本时间,那么您将总是将包部署到第 1 组机器。如果一台机器有版本 1,那么它没有版本 2,所以~v2 为真,这意味着(~v1 ∨ ~v2) 为真。出于同样的原因,如果机器有版本 2,(~v1 ∨ ~v2) 将再次为真。然而,第一个表达式正如您所描述的那样工作:您将部署到那些既没有 v1 也没有 v2 的机器上。
  • 我认为一分钱正在下降。非常感谢!
【解决方案2】:

我不熟悉这种语言,但逻辑似乎很简单。

如果我正确理解了这个问题,您希望:

  • (1,1) -> 1(既不是版本 1 也不是版本 2)
  • (1,0) -> 0(是版本 2)
  • (0,1) -> 0(是版本 1)
  • (0,0) -> 0(是版本 1 和 2)

这将通过表达式 1 来实现。

表达式 2 将返回:

  • (1,1) -> 1
  • (1,0) -> 1
  • (0,1) -> 1
  • (0,0) -> 0

我强烈建议您使用任何可以帮助您的语言进行测试(我确信有某种 print bool 函数),并且因为它不需要太多测试,真的,只需测试所有三个或四种可能性,看看它是否返回你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2015-04-14
    • 2018-02-27
    • 2011-05-29
    • 1970-01-01
    • 2019-04-19
    相关资源
    最近更新 更多