Over at https://github.com/dcolascione/elisp-generators, I have a pure-elisp implementation of Python-style generators for elisp. Perhaps the feature is best illustrate by example: (defgenerator mygen (i) (yield 1) (yield i) (yield 3)) (let ((gen (mygen 100))) (list (funcall gen) (funcall gen) (funcall gen))) -> (1 100 3) Yields can appear in arbitrary code: (defgenerator mygen2 (lim) (loop for x from 0 to lim do (yield x))) The package works by rewriting elisp into continuation-passing form and closing over the resulting continuations with a driver loop that transitions from one continuation-state to the next. After the last yield, the facility signals generator-ended. Please take a look. It'd be nice if there were cl-loop extensions to iterate over the things, and if generators were available with regular defun the way yield is available with regular "def" in Python.