Of course, crhodes pointed out that there were some FATAL flaws in my macros. Firstly, I managed to faff decf-if-not-negative (I used > instead of >=). secondly, it suffers from Multiple Evaluation.
(defun decrease-if-positive (base n)
(if (> base 0)
(- base n)
base))
(defun decrease-if-not-negative (base n)
(if (>= base 0)
(- base n)
base))
(define-modify-macro decf-if-positive (&optional (delta 1))
decrease-if-positive)
(define-modify-macro decf-if-not-negative (&optional (delta 1))
decrease-if-not-negative)
