Lazy evaluation is an evaluation strategy which holds the evaluation of an expression until its value is needed.
It avoids repeated evaluation.
Haskell is a good example of such a functional programming language whose fundamentals are based on Lazy Evaluation.