## Saturday, November 22, 2008

### 99 problems - python - 46

Define predicates and/2, or/2, nand/2, nor/2, xor/2, impl/2 and equ/2 (for logical equivalence) which succeed or fail according to the result of their respective operations; e.g. and(A,B) will succeed, if and only if both A and B succeed.

A logical expression in two variables can then be written as in the following example: and(or(A,B),nand(A,B)).

Now, write a predicate table/3 which prints the truth table of a given logical expression in two variables.
`def and_(x,y): return x and ydef or_ (x,y): return x or ydef not_(x): return not xdef nand_(x,y): return not (x and y)def nor_(x,y): return not (x or y)def xor_(x,y): return x ^ ydef impl_(x,y):return not x or ydef equ_(x,y): return x == ydef bool_table(func):    inputs = [(x,y) for x in (True,False) for y in (True,False)]    for x,y in inputs:        print "%-5s %-5s %-5s" % (x,y,func(x,y))`

Note: I'm just going to skip 47 since it's pretty much a noop based on how python already works, and how I solved this problem. Unless I'm missing something subtle.