CL-USER> (defmacro asynchronously (&body body) (alexandria:with-gensyms (counter) `(let ((,counter 0)) (lambda () (incf ,counter) (case ,counter ,@(loop for counter from 1 for form in body collect `(,counter ,form))))))) WARNING: redefining COMMON-LISP-USER::ASYNCHRONOUSLY in DEFMACRO ASYNCHRONOUSLY CL-USER> (asynchronously (print 'first) (print 'second)) # CL-USER> (funcall *) FIRST FIRST CL-USER> (funcall **) SECOND SECOND CL-USER> (funcall ***) NIL