ジェネレータ - lisp-cookbook-ja/common-lisp GitHub Wiki
Common Lispにジェネレータは標準では存在しませんので似たようなものを自作するか、ライブラリを利用することになります。
下記では、クロージャを用いて似たようなものを作成しています。
(defun gen (from below)
(let ((i from))
(lambda ()
(and (< i below)
(let ((j i))
(incf i)
j)))))
(let ((g (gen 0 10)))
(dotimes (i 11)
(princ (funcall g))))
;>> 0123456789NIL
;=> NIL
seriesを利用した例
;; series の導入
(ql:quickload :series)
(let ((g (generator (scan-range :from 0 :below 10))))
(dotimes (i 11)
(princ (next-in g))))
;-> 0123456789NIL
;=> NIL