----- Lazy evaluation -----
Lazy evaluation is a strategy that:
- - delays the evaluation of an expression until its value is needed,
- - avoids repeated evaluations, storing the result and returning the
stored result the following times that result is needed.
The benefits of that strategy are:
- - the evaluation is not repeated unnecessarily, and is completely
skipped when not required,
- - the evaluation is guaranteed to be performed before the first time
the result is used.