Control-flow macro to split into cases on what kind of AIG you have encountered.
Macro:
(defmacro aig-cases (x &key true false var inv and) (cons 'let (cons (cons (cons 'aig-cases-var (cons x 'nil)) 'nil) (cons (cons 'cond (cons (cons '(aig-atom-p aig-cases-var) (cons (cons 'cond (cons (cons '(eq aig-cases-var t) (cons true 'nil)) (cons (cons '(eq aig-cases-var nil) (cons false 'nil)) (cons (cons 't (cons var 'nil)) 'nil)))) 'nil)) (cons (cons '(eq (cdr aig-cases-var) nil) (cons inv 'nil)) (cons (cons 't (cons and 'nil)) 'nil)))) 'nil))))