This repository has been archived on 2025-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
csce420pine64backup/hw3/hw3pr3.pl

134 lines
2.1 KiB
Perl
Raw Permalink Normal View History

2017-11-15 17:56:06 -06:00
male(george).
male(phillip).
male(spencer).
male(charles).
male(mark).
male(andrew).
male(edward).
male(william).
male(harry).
male(peter).
male(mike).
male(james).
male(george2).
spouse(george, mum).
spouse(elizabeth, philip).
spouse(spencer, kydd).
spouse(diana, charles).
spouse(anne, mark).
spouse(andrew, sarah).
spouse(edward, sophie).
spouse(william, catherine).
spouse(peter, autumn).
spouse(zara, mike).
child(elizabeth, mum).
child(margaret, mum).
child(charles, elizabeth).
child(anne, elizabeth).
child(andrew, elizabeth).
child(edward, elizabeth).
child(diana, kydd).
child(william, diana).
child(harry, diana).
child(peter, anne).
child(zara, anne).
child(beatrice, sarah).
child(eugenie, sarah).
child(louise, sophie).
child(james, sophie).
child(george2, catherine).
child(charlotte, catherine).
child(savannah, autumn).
child(isla, autumn).
child(mia, zara).
is_spouse(X, Y) :-
spouse(X,Y);
spouse(Y,X).
is_child(X, Y) :-
child(X, Y);
(is_spouse(Z, Y),
child(X, Z)).
grandchild(X, Y) :-
is_child(Z, Y),
is_child(X, Z).
greatgrandparent(X, Y) :-
(is_child(Z, X),
is_child(A, Z),
is_child(Y, A));
(is_spouse(X,B),
is_child(Z, B),
is_child(A, Z),
is_child(Y, A)).
ancestor(X, Y) :-
is_child(Y, X);
(is_child(Z, X),
ancestor(Z, Y)).
brother(X, Y) :-
child(X, A),
child(Y, A),
male(X),
\==(X, Y).
sister(X, Y) :-
child(X, A),
child(Y, A),
\+ male(X),
\==(X, Y).
daughter(X, Y) :-
is_child(X, Y),
\+ male(X).
son(X, Y) :-
is_child(X, Y),
male(X).
first_cousin(X, Y) :-
(uncle(A, X),
is_child(Y, A)).
brother_in_law(X, Y) :-
(spouse(B, X),
child(B, A),
child(Z, A),
spouse(Y, Z),
\+ is_spouse(Y, X),
male(X));
(child(X, A),
child(Z, A),
spouse(Y, Z),
\+ is_spouse(Y, X),
male(X)).
sister_in_law(X, Y) :-
(spouse(B, X),
child(B, A),
child(Z, A),
spouse(Y, Z),
\+ is_spouse(Y, X),
\+ male(X));
(child(X, A),
child(Z, A),
spouse(Y, Z),
\+ is_spouse(Y, X),
\+ male(X)).
aunt(X, Y) :-
is_child(Y, Z),
sister(X, Z).
uncle(X, Y) :-
is_child(Y, Z),
brother(X, Z).
cousin(X, Y) :-
first_cousin(X, Y).