(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