medusa% cat rulers.pl
reigns(henry7, 1485, 1509).
reigns(henry8, 1509, 1547).
reigns(edward4, 1547, 1553).
reigns(jane_grey, 1553, 1553).
reigns(mary1, 1553, 1558).
reigns(elizabeth1, 1558, 1603).
reigns(james1, 1603, 1625).
reigns(charles1, 1625, 1642).
reigns(oliver_cromwell, 1642, 1658).
reigns(richard_cromwell, 1658, 1659).
reigns(charles2, 1660, 1685).
reigns(james2, 1685, 1688).
reigns(mary2, 1688, 1694).
reigns(william3, 1688, 1702).
reigns(anne, 1702, 1714).
reigns(george1, 1714, 1724).
reigns(george2, 1727, 1760).
reigns(george3, 1760, 1811).
reigns(george4, 1811, 1830).
reigns(william4, 1830, 1837).
reigns(victoria, 1837, 1901).
reigns(edward7, 1901, 1910).
reigns(george5, 1910, 1936).
reigns(edward8, 1936, 1936).
reigns(george6, 1936, 1952).
reigns(elizabeth2, 1952, 2001).
house_of(henry7, tudor).
house_of(henry8, tudor).
house_of(edward4, tudor).
house_of(jane_grey, tudor).
house_of(mary1, tudor).
house_of(elizabeth1, tudor).
house_of(james1, stuart).
house_of(charles1, stuart).
house_of(oliver_cromwell, commonwealth).
house_of(richard_cromwell, commonwealth).
house_of(charles2, stuart).
house_of(james2, stuart).
house_of(mary2, orange).
house_of(william3, orange).
house_of(anne, stuart).
house_of(george1, brunswick).
house_of(george2, brunswick).
house_of(george3, brunswick).
house_of(george4, brunswick).
house_of(william4, brunswick).
house_of(victoria, brunswick).
house_of(edward7, saxe_coburg_gotha).
house_of(george5, windsor).
house_of(edward8, windsor).
house_of(george6, windsor).
house_of(elizabeth2, windsor).

ruler(N, Y) :- reigns(N, A, B), Y >= A, Y =< B.   /* =< instead of <= */

rules(Y) :- reigns(N, A, B),  Y >= A, Y =< B,
   write(N), write(' ruled from '), write(A), write(' to '), 
   write(B), nl, fail.

years(N, H, Y) :- reigns(N, A, B), house_of(N, H), Y >= A, Y =< B.

rulers_of_house(H) :- reigns(N, A, B), house_of(N, H),
   write(N), write(', from '), write(A),
     write(' to '), write(B), nl, fail.

medusa% pl
Welcome to SWI-Prolog (Version 3.2.9)
Copyright (c) 1993-1999 University of Amsterdam.  All rights reserved.

For help, use ?- help(Topic). or ?- apropos(Word).

?- consult(rulers).
rulers compiled, 0.01 sec, 6,220 bytes.
Yes
?- ruler(X, 1560).
X = elizabeth1 ;
No
?- ruler(X, 1688).
X = james2 ;
X = mary2 ;
X = william3 ;
No
?- house_of(X, stuart).
X = james1 ;
X = charles1 ;
X = charles2 ;
X = james2 ;
X = anne ;
No
?- rules(1570).
elizabeth1 ruled from 1558 to 1603
No
?- rules(1688).
james2 ruled from 1685 to 1688
mary2 ruled from 1688 to 1694
william3 ruled from 1688 to 1702
No
?- rulers_of_house(stuart).
james1, from 1603 to 1625
charles1, from 1625 to 1642
charles2, from 1660 to 1685
james2, from 1685 to 1688
anne, from 1702 to 1714
No
?- halt.
medusa%