Logic gates in Ruby
NAND = lambda { |i, j| !(i && j) } NOT = lambda { |i| NAND[i, i] } AND = lambda { |i, j| NOT[NAND[i, j]] } OR = lambda { |i, j| NAND[NAND[i, i], NAND[j, j]] } NOR = lambda { |i, j| NOT[OR[i, j]] } XOR = lambda { |i, j| NAND[NAND[i, NAND[i, j]], NAND[j, NAND[i, j]]] } XNOR = lambda { |i, j| NOT[XOR[i, j]] } XOR[true, true] => false XOR[true, false] => true XOR[false, true] => true XOR[false, false] => false