Я программировал почти всю свою жизнь (около 20 с лишним лет), и я не думаю, что могу вспомнить хотя бы один раз, когда я смотрел на if-выражение и думал: «Хммм, это было бы хорошее время, чтобы используйте XOR ". Вся вселенная логического программирования, кажется, вращается только вокруг этих трех.
Конечно, с логическими элементами И / ИЛИ / НЕ вы можете сделать любое другое логическое утверждение. Однако может быть время, когда вам может сэкономить немного кода, чтобы объединить два или три оператора в один логический оператор. Давайте рассмотрим 16 возможных комбинаций логических связок:
- ЛОЖЬ = противоречие = 0, ноль, НЕ ИСТИНА
- ИСТИНА = тавтология = 1, НЕ ЛОЖЬ
- X = Предложение X = X
- НЕ X = отрицание X =! X
- Y = Предложение Y = Y
- НЕ Y = отрицание Y =! Y
- X AND Y = соединение = NOT (X NAND Y)
- X NAND Y = Альтернативный отказ = NOT (X AND Y),! X OR! Y
- X ИЛИ Y = Дизъюнкция = НЕ (! X И! Y)
- X ИЛИ Y = Совместное отрицание = НЕ (X ИЛИ Y),! X И! Y
- X ⊅ Y = Материальное отсутствие импликации = X AND! Y, НЕ (! X OR Y), (X XOR Y) AND X, ???
- X ⊃ Y = Материальное значение =! X OR Y, НЕ (X AND! Y), (X XNOR Y) OR X, ???
- X ⊄ Y = Обратное Неимпликация =! X AND Y, НЕ (X OR! Y), (X XOR Y) AND Y, ???
- X ⊂ Y = обратное следствие = X OR! Y, NOT (! X AND Y), (X XNOR Y) OR Y, ???
- X XOR Y = Исключительная дизъюнкция = NOT (X IFF Y), NOT (X XNOR Y), X! = Y
- X XNOR Y = Двуусловное = X IFF Y, NOT (X XOR Y),! X AND! Y
Итак, пункты 1-2 включают нулевые переменные, пункты 3-6 включают одну, а пункты 7-10 - это термины, с которыми мы знакомы. (Хотя обычно у нас нет оператора NAND, но, по крайней мере, в Perl есть «если» для универсального НЕ.)
Пункты 11-14 кажутся интересными, но я никогда не видел их в программировании. Пункты 15-16 - это XOR / XNOR.
Можно ли использовать что-либо из этого для упрощения И / ИЛИ / НЕ? Если да, то вы ими пользовались?
ОБНОВЛЕНИЕ: «Не равно» или! = действительно XOR, который используется постоянно. Итак, XOR все-таки используется.