Я иногда задаюсь вопросом, чему сейчас учат в школе! Конечно, «ИЛИ» тоже возможно. Любая система, которая может предоставить вам «НЕ» и «И», автоматически также предоставляет вам «ИЛИ», потому что:
x ИЛИ y = НЕ ((НЕ x) И (НЕ y)) см. http://en.wikipedia.org/wiki/De_Morgan%27s_laws
Так что до тех пор, пока выражение "if (x AND y) then do z" можно записать так:
if (x) if (y) (do z)
... мы должны быть в состоянии написать выражение «если (x ИЛИ y), то сделать z», , но есть проблема:
Где мы должны поставить первое «НЕ»? Ну, ответ никуда, мы должны сначала преобразовать уравнение выше:
НЕ (x ИЛИ y) = (НЕ x) И (НЕ y)
В соответствии с этим мы можем написать «if (NOT (x OR y)) then (do z)» как:
"if ((НЕ x) И (НЕ y)) тогда (do z)"
Имея это и зная, как выразить AND, как показано выше, мы можем теперь написать выражение «if (NOT (x OR y)) then (do z)» как:
if (not x) if (not y) (REM do z)
Мы также знаем, что выражение:
"если (НЕ р), то (сделать q), еще (сделать r)"
... эквивалентно:
"if (p), то (do r) else (do q)
Таким образом, мы можем написать «if (x OR y) then (do z)»:
"если (НЕ (x ИЛИ y)), то (ничего не делать), иначе (делать 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) )
... у которого есть уродливая двойная другая часть. Вы можете решить это с помощью 'goto', и мы наконец имеем:
rem if (x OR y) then (do z):
if (not x) ( if (not y) (goto :doNothing) )
rem do z
:doNothing