srfi.221
- Generator/accumulator sub-library ¶This srfi adds several utility procedures to the generator library
(see gauche.generator
- Generators, for Gauche’s native support of generators;
see scheme.generator
- R7RS generators, for R7RS-large spec).
[SRFI-221]{srfi.221
}
The constructor argument is a thunk that returns a generator.
Each operation is a procedure that takes a generator and returns
a generator.
These procedures creates and returns a generator that is a composition
of given operations on top of the one constructed by constructor.
gcompose-left
applies operations left to right (left-associative),
while gcompose-right
does right to left (right-associative).
(use gauche.generator) (use srfi.221) (generator->list (gcompose-left (cut make-iota-generator 100) (cut gfilter even? <>) (cut ggroup <> 5))) ⇒ ((0 2 4 6 8) (10 12 14 16 18) (20 22 24 26 28) (30 32 34 36 38) (40 42 44 46 48) (50 52 54 56 58) (60 62 64 66 68) (70 72 74 76 78) (80 82 84 86 88) (90 92 94 96 98)) ;; The same result can be obtained with: (generator->list (gcompose-right (cut ggroup <> 5) (cut gfilter even? <>) (cut make-iota-generator 100)))
[SRFI-221]{srfi.221
}
Calls generator repeatedly, accumulating the values into
accumulator, until generator is exhausted. Then it
retrieves and returns the accumulated value.
See scheme.generator
- R7RS generators, for the details of accumulators.
It is a generalization of generator->list
type of converter;
you can pass an accumulator that returns the desired type of result.
[SRFI-221]{srfi.221
}
Returns a generator that yields pairs, each of which consists of
an exact integer count and the value yielded by gen.
The count starts from 0 and incremented.
(generator->list (genumerate (list->generator '(a b c d e)))) ⇒ ((0 . a) (1 . b) (2 . c) (3 . d) (4 . e))
[SRFI-221]{srfi.221
}
All arguments are generators.
Returns a generator that yields a value from one of source-gens,
according to choice-gen.
The choice-gen must be a generator that yields exact integers between 0 and one minus the number of source-gens.
Each time the resulting generator is invoked, choice-gen is called. If it is exhausted, the resulting generator is also exhausted.
Otherwise, the source-gen indexed by the result of choice-gen is called, and if it isn’t exhausted, the value is returned.
If the selected source-gen is exhausted, choice-gen is retried until non-exhausted source-gen yields a value. If all source-gen is exhausted, the resulting generator is also exhausted.
[SRFI-221]{srfi.221
}
Returns a generator that yields each element of a lazy stream stream.
Lazy streams are defined in R7RS-large scheme.stream
(see scheme.stream
- R7RS stream), which is a subset of Gauche’s util.stream
(see util.stream
- Stream library).
[SRFI-221]{srfi.221
}
Returns a lazy stream whose elements consist of the values
generated by generator
Lazy streams are defined in R7RS-large scheme.stream
(see scheme.stream
- R7RS stream), which is a subset of Gauche’s util.stream
(see util.stream
- Stream library).
See also generator->lseq
(see Lazy sequences),
which returns a lazy sequence defined in R7RS-large scheme.lseq
.
In Gauche, lazy sequences are integrated to ordinary lists and more
lightweight than lazy streams.