Lazy evaluation is an implementation of normal-order reduction which avoids repeated calculation of subexpressions