Please send questions to
st10@humboldt.edu .
/* this example is adapted from Clocksin and Mellish,
"Programming in Prolog", Springer-Verlag, 1981. */
female(amelia).
female(victoria_s_c).
female(victoria).
female(alice).
male(george_iv).
male(edward_duke).
male(albert).
male(edward).
/* Child has parents Mother and Father */
has_parents(edward_duke, amelia, george_iv).
has_parents(victoria, victoria_s_c, edward_duke).
has_parents(edward, victoria, albert).
has_parents(alice, victoria, albert).
/* Has_sis has sister Is_sis */
has_sister(Has_sis, Is_sis) :- female(Is_sis),
has_parents(Has_sis, M, F),
has_parents(Is_sis, M, F),
\+(Has_sis==Is_sis).
is_parent(P) :- has_parents(_, P, _).
is_parent(P) :- has_parents(_, _, P).
/* P has ancestor A */
has_ancestor(P, A) :- has_parents(P, A, _).
has_ancestor(P, A) :- has_parents(P, _, A).
has_ancestor(P, A) :- has_parents(P, X, _), has_ancestor(X, A).
has_ancestor(P, A) :- has_parents(P, _, X), has_ancestor(X, A).