Обычный Лисп имеет (loop ... collect ...)
. Сравнить
(loop for x from 1 to 10 collect (* x x))
с его эквивалентностью, использующей unfold
:
(unfold (lambda (x) (> x 10))
(lambda (x) (* x x))
(lambda (x) (+ x 1))
1)
В общем, (unfold p f g seed)
в основном
(loop for x = seed then (g x) until (p x) collect (f x))
Редактировать: исправить опечатку