Computer Science 3675
Summer 2001
Practice questions for quiz 4

  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. In a typeless language, all type checking done at run time.

    2. Standard ML is a strongly typed language. Therefore, in Standard ML, it is not possible to get a type error at run time.

    3. Polymorphism is most useful in designing custom applications, and is rarely used in function libraries.

    4. When a variable occurs in a logic programming goal, the interpreter is being asked whether that goal holds for all values of the variable.

    5. In logic programming, a variable in an axiom might be used as an input variable sometimes, and as an output variable at other times, when computation uses that axiom.

    6. Cuts are used to reduce memory requirements and to speed up computation.

    7. Negation (the not predicate) in Prolog is mathematically correct negation, and goal not(X = 5) binds variable X to some value that is not equal to 5.

  2. In a logic programming style, write axioms for computing predicate samelength(X,Y), which is true just when X and Y are lists that have the same length.

  3. Show the logic programming search tree for goal (member(X,[3,4,5]), member(X,[4])), up to the point where a success is found. The definition of the member predicate is as follows, written in Prolog syntax.
          member(M, [M|X]).
          member(M, [X|T]) :- member(M, T).
      

  4. Polymorphism without type variables typically requires that a programmer defeat the compile-time type system. Give an example where the type system would need to be defeated without type variables, but where type variables would allow the compiler to perform type checking.

  5. What is the most general polymorphic type of function f defined by f(x) = tail(right(x))? Use type variables. Function right takes the left-hand member of an ordered pair.

  6. What is the most general polymorphic type of the Astarte function filter? Filter is defined so that (filter f L) a list of all members x of list L such that f(x) is true. For example, if function positive returns true on a positive number and false on a nonpositive number, then (filter positive [9,-2,-3,6]) = [9,6].