如何重写否定行?

问题描述 投票:0回答:1

否定需要我几个小时的反复试验,直到没有任何问题,除了直觉之外还有什么否定方法?例如:

//x and y are whole numbers

!((x<9) && (y<=(8-x)))
((x>8) || (y>(8-x)))
javascript logic
1个回答
2
投票

最简单的事情就是忽略有关价值观领域的问题,并将其视为完全逻辑问题。然后我们可以将其分解为以下情况:

!(A || B) ~= !A && !B
!(A && B) ~= !A || !B
!(!A) ~= A
!(x > y) ~= x <= y
!(x >= y) ~= x < y

前两个可以轻松扩展:

!(A || B || C || D || ...) ~= !A && !B && !C && !D && ...
!(A && B && C && D && ...) ~= !A || !B || !C || !D || ...

因此,对于您的示例之一,我们有:

!((x < 9) && (y <= (8 - x)))
!(x < 9) || !(y <= (8 - x))
(x >=9) || (y > (8 - x))

我们可以将其保留为这样,但由于您有其他域信息(“x 和 y 是整数”),您可以将其合并以返回稍微不太具体但在上下文中足够准确的答案,例如

(x > 8) || (y > (8 - x))

您必须根据具体情况决定是否值得采取额外的步骤。它可能会获得稍微减少的代码库,但也可能会因与原始格式的不太透明的链接而丢失。

© www.soinside.com 2019 - 2024. All rights reserved.