Create a function which collects values as by PUSH.
(defun make-pusher (&optional initial-value)
"Create a function which collects values as by PUSH."
(let ((value initial-value))
(lambda (&rest items)
(if items
(progn
(dolist (i items)
(push i value))
items)
value))))Source Context