Code: Select all
;;Negate a boolean function
;;Write (not (= x y)) as (n = x y)
(define-macro (n)
(not (eval-string
(join (list "("
(join (map name (map sym (args))) " ")
")"
))
))
)
;;Convert a boolean to an if statement
;;Write (if (= x 3) a b) as (i = x 3 a b)
(define-macro (i)
(setq vars (map name (map sym (args))))
(setq L (length vars))
(setq a-part (vars (- L 2)))
(setq b-part (last vars))
(setq test (join (0 (- L 2) vars) " ")
test (join (list "(" test ")"))
)
(eval-string
(join (list "(if " test " " a-part " " b-part ")")))
)
;;Convert a boolean to an if statement
;;Write (if (not (= x 3)) a b) as (ni = x 3 a b)
(define-macro (ni)
(setq vars (map name (map sym (args))))
(setq L (length vars))
(setq a-part (vars (- L 2)))
(setq b-part (last vars))
(setq test (join (0 (- L 2) vars) " ")
test (join (list "(not (" test "))"))
)
(eval-string
(join (list "(if " test " " a-part " " b-part ")")))
)