chickadee » srfi-121 » list->generator

list->generator lisprocedure
vector->generator vec #!optional start endprocedure
reverse-vector->generator vec #!optional start endprocedure
string->generator str #!optional start endprocedure
bytevector->generator bytevector #!optional start endprocedure

These procedures return generators that yield each element of the given argument. Mutating the underlying object will affect the results of the generator.

(generator->list (list->generator '(1 2 3 4 5)))
 ⇒ (1 2 3 4 5)
(generator->list (vector->generator '#(1 2 3 4 5)))
 ⇒ (1 2 3 4 5)
(generator->list (reverse-vector->generator '#(1 2 3 4 5)))
 ⇒ (5 4 3 2 1)
(generator->list (string->generator "abcde"))
 ⇒ (#\a #\b #\c #\d #\e)

The generators returned by the constructors are exhausted once all elements are retrieved; the optional start-th and end-th arguments can limit the range the generator walks across.

For reverse-vector->generator, the first value is the element right before the end-th element, and the last value is the start-th element. For all the other constructors, the first value the generator yields is the start-th element, and it ends right before the end-th element.

(generator->list (vector->generator '#(a b c d e) 2))
 ⇒ (c d e)
(generator->list (vector->generator '#(a b c d e) 2 4))
 ⇒ (c d)
(generator->list (reverse-vector->generator '#(a b c d e) 2))
 ⇒ (e d c)
(generator->list (reverse-vector->generator '#(a b c d e) 2 4))
 ⇒ (d c)
(generator->list (reverse-vector->generator '#(a b c d e) 0 2))
 ⇒ (b a)