ORF
A macro seen in some utility/convenience layers. A simple definition (from McCLIM) is:

(define-modify-macro orf (&rest args) or)

Another possibility is to modify the place only if it's null. This definition is more involved:

(defmacro orf (place &rest forms &environment environment) (multiple-value-bind (temps vals news writer reader) (get-setf-expansion place environment) (let* ((new-form `(or ,@forms)) (set-form `(multiple-value-bind ,news ,new-form ,writer))) `(let* (,.(mapcar #'list temps vals)) (or ,reader ,set-form)))))

There's also an atomic version of orf, using SBCL's get-cas-expansion.


macro example