What is one important motivation for including exception handling in a programming language?
How is exception handling implemented in a typical language, such as Java?
Are backtracking and exception handling the same thing? For example, can you use the exception handling mechanism of Java to do backtracking?
Using backtracking, write a Cinnameg program fragment that will print all solutions (x,y) to equation xy − 2x2 + y = 10, where x and y are both integers in the range 0,...,100. Do not use a loop or recursion. Your program fragment can fail when it is done.
Unification is a form of pattern matching. Which of the following is not a characteristic of unification?
True or false.
When a variable occurs in a logic programming goal, the interpreter is being asked whether that goal holds for all values of the variable.
When a variable occurs in a logic programming axiom, the interpreter is being told that axiom holds for all values of the variable.
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.
Explain negation-as-failure. What is its goal, and how does it work?
Does negation-as-failure always do correct logical negation?
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).
In a logic programming style, write axioms for computing predicate prefix(X,Y), which is true just when list X is a prefix of list Y. For example, prefix([2,4,6], [2,4,6,8,10]) is true. Every list is a prefix of itself.
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.
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.
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.
The append predicate is defined as follows in Prolog.
append([], Y, Y). append([A|X], Y, [A|Z]) :- append(X, Y, Z).You would like to define a predicate double(X), which is true if list X has the form Y ++ Y, for some Y. For example, double([a,b,c,a,b,c]) is true, but double([a,b,c,a]) is false.
Which of the following is a correct definition of double in Prolog?
Using the correct definition of predicate double from the preceding exercise, can a Prolog interpreter handle goal double(Z), where Z is an unbound variable? If so, what will it do? If not, why not?
You would like to write a definition of predicate member, where member(X, L) is true if X is a member of list L. Which of the following is a correct definition of member?