Problem 1 The following two slides contain part
Problem 1 The following two slides contain part of the definition of a data base of English word forms using the lex/4 predicate. With this data base as part of your program, answer questions 1. 1 and 1. 2. Martin Kay Introduction to Prolog 1
lex— 1 lex(love, n, sing). lex(love, v, base). lex(loves, love, v, pres(sg, 3)). lex(loves, love, n, plur). lex(loving, love, v, pres_part). lex(loved, love, v, past). lex(grind, v, base). lex(grinds, grind, v, pres(sg, 3)). lex(grinding, grind, v, pres_part). lex(ground, grind, v, past). lex(ground, n, sing). lex(grounds, ground, n, plur). lex(see, v, base). lex(sees, see, v, pres(sg, 3)). Martin Kay Introduction to Prolog 2
lex— 2 lex(seeing, see, v, pres_part). lex(saw, see, v, past_tense(_, _)). lex(seen, see, v, past_part). lex(hit, v, short). lex(hits, hit, v, pres(sg, 3)). lex(hitting, hit, v, pres_part). lex(sheep, n, _). lex(X, X, v, base) : lex(X, X, v, short). lex(X, X, v, past) : lex(X, X, v, short). Martin Kay lex(X, X, v, inf) : lex(X, X, v, base). lex(X, X, v, pres(sg, 1)) : lex(X, X, v, base). lex(X, X, v, pres(sg, 3)) : lex(X, X, v, base). lex(X, X, v, pres(pl, _)) : lex(X, X, v, base). Introduction to Prolog 3
Question 1. 1 Write a predicate ambiguous(X) that is true just in case X is a word that can be both a noun and a verb. It should allow you to do this: | ? - ambiguous(ground). yes | ? - ambiguous(see). no | ? - ambiguous(X). X=love yes | ? Martin Kay Introduction to Prolog 4
Question 1. 2 Notice that the verb “see” has a past_tense and a “past_part” form. The other verbs have only a “past” form, because there is no difference between their pasttense and past-participle forms. Write two new clauses which when applied to any verb with a “past” entry in the data base, will enable the past_tense and past_part forms to be found. They should make it possible to do at least this: | ? - lex(loved, love, v, past_tense). yes | ? lex(loved, love, v, past_part). yes | ? Martin Kay Introduction to Prolog 5
Problem 2 reverse([], []). reverse([H|T], Rev) : reverse(T, RT), append(RT, [H], Rev). There is a much more efficient way of reversing a list than the one given in class. The trick is to use another predicate, with three arguments, to do the work, so that reverse itself is defined like this: reverse(A, B) : rev (A, [], B). Write the two-clause definition of rev/3. Martin Kay Introduction to Prolog 6
Problem 3 Write a predicate delete(List 1, Member, List 2). which is true just in case List 2 is the result of deleting Member from List 1. The predicate should fail if Member is not a member of List 1. | ? - delete([a, b, a, c, a, d, a, e], a, X). X = [b, a, c, a, d, a, e] ? ; X = [a, b, a, c, a, d, e] ? ; no | ? Martin Kay Introduction to Prolog 7
- Slides: 7