Fix: P41

Remove duplicate code.
Added skeleton Logic file
Test: P46

P46 (**) Truth tables for logical expressions.
Define functions and, or, nand, nor, xor, impl, and equ (for logical
equivalence) which return true or false according to the result of their
respective operations; e.g. and(A, B) is true if and only if both A and
B are true.
scala> and(true, true)
res0: Boolean = true

scala> xor(true, true)
res1: Boolean = false
A logical expression in two variables can then be written as an function
of two variables, e.g: (a: Boolean, b: Boolean) => and(or(a, b), nand(a,
b))
Done: P46 (1st part)

P46 (**) Truth tables for logical expressions.
Define functions and, or, nand, nor, xor, impl, and equ (for logical
equivalence) which return true or false according to the result of their
respective operations; e.g. and(A, B) is true if and only if both A and
B are true.
scala> and(true, true)
res0: Boolean = true

scala> xor(true. true)
res1: Boolean = false
A logical expression in two variables can then be written as an function
of two variables, e.g: (a: Boolean, b: Boolean) => and(or(a, b), nand(a,
b))
Done: P46 (2nd part)

P46 (**) Truth tables for logical expressions.

Now, write a function called table2 which prints the truth table of a
given logical expression in two variables.

scala> table2((a: Boolean, b: Boolean) => and(a, or(a, b)))
A     B     result
true  true  true
true  false true
false true  false
false false false