(defun partitionx (list &rest lambdas) (let ((collectors (mapcar (lambda (l) (cons (if (and (symbolp l) (member l (list :otherwise t) :test #'string=)) (constantly t) l) (make-collector))) lambdas))) (dolist (item list) (block item (dolist* ((test-func . collector-func) collectors) (when (funcall test-func item) (funcall collector-func item) (return-from item))))) (mapcar #'funcall (mapcar #'cdr collectors))))Source Context