----- 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.