This is occasionally useful for avoiding case-splitting in theorems.
Function:
(defun binary-or* (x y) (declare (xargs :guard t)) (if x x y))
Function:
(defun or*-macro (x) (declare (xargs :guard t)) (cond ((atom x) nil) ((atom (cdr x)) (car x)) (t (cons 'binary-or* (cons (car x) (cons (or*-macro (cdr x)) 'nil))))))