否定会花费我数小时的反复试验,直到一切都没有中断为止,除了直觉之外,是否还有其他否定方法?例如:

//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/

10-13 22:51