Usefulness of the "not in" operator
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Sat Oct 8 12:08:35 EDT 2011
Roy Smith wrote:
> If you want to take it one step further, all the boolean operators can
> be derived from nand (the dualists would insist on using nor).
Let's define the boolean values and operators using just two functions:
def true(x, y):
return x
def false(x, y):
return y
That's all we need to define all of Boolean algebra. Unfortunately, it's a
bit ugly in Python:
>>> true
<function true at 0xb7c3a36c>
So let's add a helper function to prettify the output:
def pr(b):
print(b(true, false).__name__)
>>> pr(true)
true
Much nicer!
Now define NAND:
def Nand(a, b):
return (lambda c: lambda x, y: c(y, x))(a(b, a))
and we're done. All of boolean algebra can now be derived from Nand.
>>> def Not(b):
... return Nand(b, b)
...
>>> pr(Not(true))
false
>>> pr(Not(false))
true
>>> def And(a, b):
... return Nand(Nand(a, b), Nand(a, b))
...
>>> pr(And(true, false))
false
>>> pr(And(true, true))
true
>>> def Or(a, b):
... return Nand(Nand(a, a), Nand(b, b))
...
>>> pr(Or(true, false))
true
>>> pr(Or(false, false))
false
>>> def Xor(a, b):
... return And(Nand(a, b), Or(a, b))
...
>>> pr(Xor(true, false))
true
>>> pr(Xor(true, true))
false
and so forth.
--
Steven
More information about the Python-list
mailing list