否定需要我几个小时的反复试验,直到没有任何问题,除了直觉之外还有什么否定方法?例如:
//x and y are whole numbers
!((x<9) && (y<=(8-x)))
((x>8) || (y>(8-x)))
最佳答案
最简单的事情就是忽略有关值域的问题,并将其视为完全逻辑问题。那么我们可以将其分解为以下几种情况:
!(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))
您必须根据具体情况决定是否值得采取额外的步骤。它可能会获得稍微减少的代码库,但也可能会失去与原始格式的不太透明的链接。
关于javascript - 如何重写否定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22469071/