Penguin

LazyEvaluation is an approach that a ProgrammingLanguage can take to evaluating expressions. With LazyEvaluation a function is passed whole expressions as arguments, and does not evaluate them until it needs their values.

You could call C's && and || operators lazy operators: they do not always evaluate their second arguments. But this is a built-in feature of C and there's no way to specify user defined operators that work that way. In Haskell f.ex, which is the most widely used lazy functional programming language, you can.

I/O is problematic in lazy languages. Lazy languages don't assume a linear flow of time: you have to model that explicitly in your programs! Programmers need to provide some way to keep I/O operations in the correct sequence; in Haskell this is done using a data structure called the "monad".