我有时想知道,现在人们在学校学到什么!当然“或”也是可能的。任何可以为您提供“NOT”和“AND”的系统也会自动为您提供“OR”,因为:
x OR y = NOT ( (NOT x) AND (NOT y) ) 见http://en.wikipedia.org/wiki/De_Morgan%27s_laws
所以只要表达式“if (x AND y) then do z”可以这样写:
if (x) if (y) (do z)
...我们应该可以写成“if (x OR y) then do z”,但是有一个问题:
我们应该把第一个'NOT'放在哪里?好吧,答案无处可去,我们应该先将上面的等式改写为:
NOT (x OR y) = (NOT x) AND (NOT y)
据此,我们可以将“if (NOT(x OR y)) then (do z)”写成:
"if ((NOT x) AND (NOT y)) then (do z)"
有了这个并且知道如何表达如上所示的AND,我们现在可以将表达式“if (NOT(x OR y)) then (do z)”写成:
if (not x) if (not y) (REM do z)
我们也知道表达式:
"if (NOT p) then (do q) else (do r)"
... 等价于:
"if (p) then (do r) else (do q)
因此我们可以写成“if (x OR y) then (do z)”:
"if (NOT(x OR y)) then (do nothing) else (do z)"
所以我们可以将 "if (x OR y) then (do z)" 表示为:
if (not x) if (not y) (REM do nothing) else (REM do z)
但这还不完整,因为这不是真正的“与”,而是“模拟”的。缺少的是第二个。所以得到正确结果的完整形式应该是:
if (not x) ( if (not y) (REM do nothing) else (REM do z) ) else (REM do z) )
... 它有丑陋的双重 else 部分。您可以使用“goto”来解决这个问题,我们终于拥有了:
rem if (x OR y) then (do z):
if (not x) ( if (not y) (goto :doNothing) )
rem do z
:doNothing