CSc 372 - Comparative Programming Languages
14 : Haskell -- Lazy Evaluation

Christian Collberg

Department of Computer Science

University of Arizona

1 Lazy evaluation

2 Don't Evaluate Until Necessary

3 Don't Evaluate Until Necessary...

4 Evaluate Shared Expressions Once

5 Evaluate Shared Expressions Once...

6 Saving Reductions

7 Taking the Minimum

8 Taking the Minimum...

9 Infinite data structures


\begin{program}
ones = 1 : ones \\
\\
\redtt{> take 10 ones}\\
{[1,1,1,1,1,1,1,1,1,1]} \\
(277 reductions, 389 cells)
\end{program}

10 Infinite data structures...


\begin{program}
countFrom n = n : countFrom (n+1) \\
\\
\redtt{> countFrom 1}\\
{[1, 2, 3, 4, 5, 6, 7, 8,\verb+^+C{Interrupted!}] }
\end{program}

11 Infinite data structures...

12 Infinite data structures...

13 Infinite data structures...


\begin{program}
powersOfTwo = 1 : map (*2) powersOfTwo \\
\\
twoToThe n = powersOfTwo !! n \\
\\
\redtt{> twoToThe 5} \\
32
\end{program}

14 Fibonacci

15 Acknowledgements



Christian S. Collberg
2005-09-21