!TITLE A Small Database !KEY The goal descendant(X,Y) is true if Y is a descendant of X. | descendant(X,Y) :- offspring(X,Y). | descendant(X,Z) :- offspring(X,Y), descendant(Y,Z). | | offspring(abraham,ishmael). | offspring(abraham,isaac). | offspring(isaac,esau). | offspring(isaac,jacob). If for example the question ?- descendant(abraham,X). is executed, Prolog's backtracking results in different descendants of Abraham being returned as successive instances of the variable X, i.e. X = ishmael X = isaac X = esau X = jacob