Exercises

## 3.10 Exercises

1. Consider again the “family tree” example (see Section 3.4.2). As well as the parent/2 predicate, suppose we have a male/1 predicate as follows:

   >     male(abe).
   >     male(homer).
   >     male(herbert).
   >     male(bart).

   Define a brother/2 predicate, expressed just in terms of parent/2 and male/1. Make sure Homer is not considered his own brother.

2. Consider the following alternative definition of ancestor/2:

   >     ancestor(X, Y) :- parent(X, Y).
   >     ancestor(X, Y) :- ancestor(X, Z), parent(Z, Y).

   What is wrong with this code? What happens if you use it to find out who Bart is an ancestor of?