(defun make-collector ()
(let ((none '#:none))
(declare (dynamic-extent none))
(cl-utilities:with-collectors (buffer)
(return-from make-collector
(lambda (&optional (data none))
(unless (eq data none)
(buffer data))
buffer)))))
(setf a (make-collector))
(funcall a 2)
(funcall a 3)
(funcall a 4)
(funcall a) ; ==> (2 3 4)
; how to delete element 3 from a's buffer/collector ?