## 2.3 Exercises

Exercise 2.1

Which of the following pairs of terms match? Where relevant, give the variable instantiations that lead to successful matching.

1. `bread = bread`

2. `'Bread' = bread`

3. `'bread' = bread`

4. `Bread = bread`

5. `bread = sausage`

6. `food(bread) = bread`

7. `food(bread) = X`

8. `food(X) = food(bread)`

9. `food(bread,X) = food(Y,sausage)`

10. `food(bread,X,beer) = food(Y,sausage,X)`

11. `food(bread,X,beer) = food(Y,kahuna_burger)`

12. `food(X) = X`

13. `meal(food(bread),drink(beer)) = meal(X,Y)`

14. `meal(food(bread),X) = meal(X,drink(beer))`

Exercise 2.2

We are working with the following knowledge base:

`house_elf(dobby).witch(hermione).witch('McGonagall').witch(rita_skeeter).magic(X):-house_elf(X).magic(X):-wizard(X).magic(X):-witch(X).`

Which of the following queries are satisfied? Where relevant, give all the variable instantiations that lead to success.

1. `?- magic(house_elf).`

2. `?- wizard(harry).`

3. `?- magic(wizard).`

4. `?- magic('McGonagall').`

5. `?- magic(Hermione).`

Draw the search tree for the fifth query `magic(Hermione)`.

Exercise 2.3

Here is a tiny lexicon and mini grammar with only one rule which defines a sentence as consisting of five words: an article, a noun, a verb, and again an article and a noun.

`word(article,a).word(article,every).word(noun,criminal).word(noun,'big kahuna burger').word(verb,eats).word(verb,likes). sentence(Word1,Word2,Word3,Word4,Word5) :-        word(article,Word1),        word(noun,Word2),        word(verb,Word3),        word(article,Word4),        word(noun,Word5).`

What query do you have to pose in order to find out which sentences the grammar can generate? List all sentences that this grammar can generate in the order Prolog will generate them. Make sure that you understand why Prolog generates them in this order.

Exercise 2.4

Here are six English words:

abalone, abandon, anagram, connect, elegant, enhance.

They are to be arranged in a crossword puzzle like fashion in the grid given below.

The following knowledge base represents a lexicon containing these words.

`word(abalone,a,b,a,l,o,n,e).word(abandon,a,b,a,n,d,o,n).word(enhance,e,n,h,a,n,c,e).word(anagram,a,n,a,g,r,a,m).word(connect,c,o,n,n,e,c,t).word(elegant,e,l,e,g,a,n,t).`

Write a predicate `crosswd/6` that tells us how to fill the grid, i.e. the first three arguments should be the vertical words from left to right and the following three arguments the horizontal words from top to bottom.

Patrick Blackburn, Johan Bos and Kristina Striegnitz
Version 1.2.5 (20030212)