(defn and3 [x y z] (and x (and y z))) (defn and4 [a b c d] (and (and a b) (and c d))) (defn or3 [x y z] (or x (or y z))) (defn or4 [x0 x1 x2 x3] (or (or x0 x1) (or x2 x3))) (defn mux8 [a b c d e f g h select] (let [[s0 s1 s2] select] (or8-1 [(and4 a (not s0) (not s1) (not s2)) (and4 b s0 (not s1) (not s2)) (and4 c (not s0) s1 (not s2)) (and4 d s0 s1 (not s2)) (and4 e (not s0) (not s1) s2) (and4 f