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 ")")))
)