134 lines
2.1 KiB
Perl
134 lines
2.1 KiB
Perl
![]() |
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).
|