I'd like to propose the addition of the following function: (defun maybecall (bool fn &rest args) "Call FN with ARGS if BOOL is T. Otherwise return ARGS as multiple values." (if bool (apply fn args) (values-list args))) MAYBECALL is the general, or anonymous, solution to many ensure-foo problems. (maybecall (not (listp thing)) #'list thing) == (ensure-list thing) (maybecall (listp thing) #'car thing) == (ensure-car thing) I've thought about naming it FUNCALL-IF, but that could be read as taking a predicate function a la all the sequence functions, rather than a boolean value. And the result of making it take a predicate (funcall-if #'listp #'car thing) is not so nice if you want the call not to depend directly on the arguments passed. E.g. a use case where I often use MAYBECALL is to call a function depending on a flag (most often argument to the surrounding function.) I.e. (maybecall removep #'remove foo bars) vs. (funcall-if (constantly removep) #'remove foo bars) That said, I don't care much which of these two you eventually decide upon. -T.