It was written by Jonathan Amsterdam at MIT and recently ported to Common Lisp.
The canonical site for information about iterate is at http://common-lisp.net/project/iterate/.
(iterate (for (key . item) in alist) (collect key into keys) (collect item into items) (finally (return (values keys items))))collects keys and items of an alist into two values
It also supports generators:
(iterate (generate i from 0 to 6) (for (key . value) in '((a . 2) (zero . 10) (one . 20) (d . 5))) (when (>= value 10) (collect (cons key (next i))))) => ((ZERO . 0) (ONE . 1))
and allows easy finding of extrema:
(iterate (for elt in list-of-lists) (finding elt maximizing (length elt)))finds the longest list in a list of lists and generates pretty fast code, too. (-: