Computer Science 3675
Section 001
Fall 2009
Practice questions for quiz 5

  1. True or false.

    1. Using a cut can reduce the time used by a backtracking program.

      Answer

    2. Using a cut can reduce the amount of memory used by a backtracking program.

      Answer

    3. Using a cut in a predicate definition usually restricts the modes in which a predicate can run.

      Answer

    4. It is rare to find cuts in logic programs.

      Answer

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

      Answer

    6. 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.

      Answer

  2. Unification is a form of pattern matching. Which of the following is not a characteristic of unification?

    1. Unification never changes the binding of a bound variable.
    2. Unification is symmetric; unifying A with B has exactly the same effect as unifying B with A.
    3. Unification is very slow, and is only used rarely during computations of logic programs.
    4. Unification can bind unbound variables.

    Answer

  3. Explain negation as failure. What is its goal, and how does it work?

    Answer

  4. 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.

    Answer

  5. In a logic programming style, write axioms for computing predicate allsame(X), which is true just when all members of list X are the same. For example, allsame([5,5,5]) is true, as is allsame([a,a]), but allsame([2,4,4]) is false. Note that allsame([]) is true, and allsame([b]) is true.

    Answer

  6. Two individuals are cousins if they have a grandparent in common, but they are not the same person, and are not siblings. Using predicate grandparent(X, Y), meaning that X is a grandparent of Y, and predicate sibling(X, Y) meaning that X and Y are siblings, write a definition of cousin(X, Y) using Prolog notation, meaning that X and Y are cousins.

    Answer

  7. 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).
      

    Answer