Computer Science 3675
Summer 2001
Practice questions for quiz 2

  1. Write a clearly legible T to the left of each of the following that is true, and a clearly legible F to the left of each that is false.
    1. Pattern matching can be used to bind names by solving simple equations.
    2. Sometimes a pattern match can fail.
    3. In C++, every block begins at the start of a function, and ends at the end of the function.

  2. What is shadowing, and how can it occur? Give an example.

  3. Given the definition
          f([])   = []
          f(h::t) = (h*h)::f(t)  when h > 10
          f(h::t) = f(t)         when h <= 10
      
    show an inside-out evaluation of expression f([4,12,15,6,11]). Assume that arithmetic is done as soon as possible.

  4. Write an equational definition of a function called smallest so that smallest(n,x) is the smallest member of list n::x. For example, smallest(3, [6,4,7]) = 3 and smallest(8, [2,5]) = 2. You may presume that you have a function called min that takes the minimum of two numbers. For example, min(7,4) = 4.

  5. In a purely functional language, is it ever possible to compute the same expression twice in the same context and get different values? For example, if E is an expression, and you compute E two times, one right after another, could the first computation yield a different result from the second computation? Why or why not?