Usefulness of the "not in" operator

Alec Taylor alec.taylor6 at gmail.com
Mon Oct 10 08:16:55 EDT 2011


On Sun, Oct 9, 2011 at 3:08 AM, Steven D'Aprano
<steve+comp.lang.python at pearwood.info> wrote:
> 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
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>

Awesome



More information about the Python-list mailing list