FunctionSwift
sequence(state:next:)
Returns a sequence formed from repeated lazy applications of next
to a mutable state
.
func sequence<T, State>(state: State, next: @escaping (inout State) -> T?) -> UnfoldSequence<T, State>
Parameters
- state
The initial state that will be passed to the closure.
- next
A closure that accepts an
inout
state and returns the next element of the sequence.
Returns
A sequence that yields each successive value from next
.
Overview
The elements of the sequence are obtained by invoking next
with a mutable state. The same state is passed to all invocations of next
, so subsequent calls will see any mutations made by previous calls. The sequence ends when next
returns nil
. If next
never returns nil
, the sequence is infinite.
This function can be used to replace many instances of AnyIterator
that wrap a closure.
Example:
// Interleave two sequences that yield the same element type
sequence(state: (false, seq1.makeIterator(), seq2.makeIterator()), next: { iters in
iters.0 = !iters.0
return iters.0 ? iters.1.next() : iters.2.next()
})