0

Task: Create a database query that gives a hierarchical relationship for any two representatives of the genus, in other words, find out who is the ancestor and who is the descendant.
Database:

parent('Rurik', 'Igor').
parent('Igor', 'Olga').
parent('Olga', 'Svyatoslav Igorevich').
parent('Svyatoslav Igorevich', 'Yaropolk').
parent('Yaropolk', 'Svyatopolk Okoyanny').
parent('Svyatoslav Igorevich', 'Vladimir Svyatoy').
parent('Vladimir Svyatoy', 'Yaroslav I Mudry').
parent('Yaroslav I Mudry', 'Svyatoslav').
parent('Svyatoslav', 'Oleg').
parent('Oleg', 'Vsevolod II').
parent('Yaroslav I Mudry', 'Izyaslav I').
parent('Izyaslav I', 'Svyatopolk').
parent('Yaroslav I Mudry', 'Vsevolod I').
parent('Vsevolod I', 'Vladimir Monomah').
parent('Vladimir Monomah', 'Mstislav Veliky').
parent('Mstislav Veliky', 'Izyaslav II').
parent('Vladimir Monomah', 'Yaropolk II').
parent('Vladimir Monomah', 'Yuriy Dolgoruky').
parent('Yuriy Dolgoruky', 'Mikhail I').
parent('Yuriy Dolgoruky', 'Vsevolod Bolshoe Gnezdo').
parent('Vsevolod Bolshoe Gnezdo', 'Yuriy II').
parent('Vsevolod Bolshoe Gnezdo', 'Yaroslav II').
parent('Vsevolod Bolshoe Gnezdo', 'Konstantin I').
parent('Yaroslav II', 'Andrey').
parent('Andrey', 'Vasiliy').
parent('Vasiliy', 'Konstantin II').
parent('Konstantin II', 'Dmitriy Suzdalskiy').
parent('Yaroslav II', 'Vasiliy Kostramskoy').
parent('Yaroslav II', 'Yaroslav III Tverskoy').
parent('Yaroslav III Tverskoy', 'Mikhail II Svyatoy').
parent('Mikhail II Svyatoy', 'Alexandr II').
parent('Yaroslav II', 'Alexandr Nevskiy').
parent('Alexandr Nevskiy', 'Andrey Gorodeckiy').
parent('Alexandr Nevskiy', 'Dmitriy Pereyaslavskiy').
parent('Alexandr Nevskiy', 'Daniil Moskovskiy').
parent('Daniil Moskovskiy', 'Yuriy III Moskovskiy').
parent('Daniil Moskovskiy', 'Ioan I Kalita').
parent('Ioan I Kalita', 'Simeon Gordiy').
parent('Ioan I Kalita', 'Ioan II Krotkiy').
parent('Ioan II Krotkiy', 'Dmitriy Donskoy').
parent('Dmitriy Donskoy', 'Vasiliy I').
parent('Vasiliy I', 'Vasiliy II Temniy').
parent('Vasiliy II Temniy', 'Ioan III').
parent('Ioan III', 'Vasiliy III').
parent('Vasiliy III', 'Ioan IV').
parent('Ioan IV', 'Fedor').

relations(X,Z) :- parent(X,Z).
relations(X,Z) :- parent(X,Y), ancestor(Y,Z).

Example:

?- relations('Rurik', 'Oleg').

Rurik - ancestor, Oleg - descendant.
How to implement this?

false
  • 10,264
  • 13
  • 101
  • 209
GOOse
  • 13
  • 2
  • What rules have you written this far to attempt this? – Paul Brown Nov 12 '19 at 15:19
  • I added a couple of lines to the database, but this is not what I need, because when I request: ?- relations ('Rurik', 'Oleg') it will print: true, but I need: ?- relations('Rurik', 'Oleg') ---> Rurik - ancestor, Oleg - descendant. – GOOse Nov 12 '19 at 21:54
  • seems like You need a ``ancestor(Ancestor,Descendent) :- _etc_`` and a ``descendent(Descendent,Ancestor) :- _etc_`` to be able to answer those questions . – Kintalken Nov 13 '19 at 03:52
  • may be, but how to implement this? – GOOse Nov 13 '19 at 07:18

0 Answers0