Lazy Operations
All the
sequences and methods we have looked at so far this lesson have been
eager, which means they perform their operations immediately, and
filter,
map, and
flatMap return their results in arrays. But sometimes, we may want to delay operations until they are needed.
Say you have a very large array, and you want to first use
map and then perform other operations. If done eagerly,
map will create a new array with the same number of elements as the original one to store its results. But if we do it lazily,
map will return a
LazyMapSequence, which will perform each map operation directly when
asked for, without using any intermediate storage.
Infinite sequences must be handled lazily, as they obviously cannot be stored.
Lazy Sequences

A lazy sequence is one that conforms to
LazySequenceProtocol. The original sequence itself may or may not work lazily internally, but some further operations on
the sequence...