1

Тема: Пролог - программа по родственникам.

predicates

   мужчина(string)
   женщина(string)
   родитель(string, string)
   невестка(string, string)
   зять(string, string)
   супруг(string, string)
   
clauses

   мужчина("Сергей").
   мужчина("Дмитрий").
   мужчина("Валера").
   мужчина("Пётр").
   мужчина("Михаил").
   мужчина("Николай").
   мужчина("Алекс").
   мужчина("Александр").
   мужчина("Костя").
   
   женщина("Барбара").
   женщина("Анна").
   женщина("Татьяна").
   женщина("Лиза").
   женщина("Катя").   
   женщина("Юля").
   женщина("Раиса").
   женщина("Люда").
   
   родитель("Барбара", "Лиза").
   родитель("Лиза", "Алекс").
   родитель("Алекс", "Костя").
   родитель("Анна", "Катя").
   родитель("Анна", "Пётр").
   родитель("Сергей", "Катя").
   родитель("Сергей", "Пётр").
   родитель("Катя", "Юля").   
   родитель("Пётр", "Алекс"). 
   родитель("Пётр", "Александр").
   родитель("Александр", "Люда").
   родитель("Юля", "Люда").
   родитель("Татьяна", "Михаил").
   родитель("Дмитрий", "Михаил").
   родитель("Михаил", "Юля").
   родитель("Валера", "Николай").
   родитель("Николай", "Раиса").
   родитель("Раиса", "Костя").
   родитель("Лиза", "Александр").
   
   супруг("Анна", "Сергей").
   супруг("Сергей", "Анна").
   супруг("Татьяна", "Дмитрий").
   супруг("Дмитрий", "Татьяна").
   супруг("Лиза", "Пётр").
   супруг("Пётр", "Лиза").
   супруг("Катя", "Михаил").
   супруг("Михаил", "Катя").
   супруг("Алекс", "Раиса").
   супруг("Раиса", "Алекс").
   супруг("Александр", "Юля").
   супруг("Юля", "Александр").
   
   невестка(A, B) :-
   супруг(A, C),
   родитель(B, C),
   женщина(A),
   C <> B.
   
   невестка(A, B) :-
   супруг(A, C),
   родитель(D, C),
   родитель(D, B),
   родитель(E, C),
   родитель(E, B),
   D <> E,
   женщина(D),
   мужчина(E),
   женщина(A),
   C <> B.
   
   невестка(A, B) :-
   супруг(A, C),
   родитель(D, C),
   родитель(D, F),
   родитель(E, C),
   родитель(E, F),
   D <> E,
   женщина(D),
   мужчина(E),
   женщина(A),
   C <> F,
   супруг(F, B).
         
   зять(A, B) :-
   супруг(A, C),
   родитель(B, C),
   мужчина(A),
   C <> B.
   
   зять(A, B) :-
   супруг(A, C),
   родитель(D, C),
   родитель(D, B),
   родитель(E, C),
   родитель(E, B),
   D <> E,
   женщина(D),
   мужчина(E),
   мужчина(A),
   C <> B.
   
   зять(A, B) :-
   супруг(A, C),
   родитель(D, C),
   родитель(D, F),
   родитель(E, C),
   родитель(E, F),
   D <> E,
   женщина(D),
   мужчина(E),
   мужчина(A),
   C <> F,
   супруг(F, B).
     
   goal
   
   невестка(A, B),
   write (A, " невестка ", B, " ") or
   зять(A, B),
   write (A, " зять ", B, " ").

Поделиться

2

Re: Пролог - программа по родственникам.

predicates

   мужчина(string)
   женщина(string)
   родитель(string, string)
   двоюродный_родственник(string, string)
   двоюродная_сестра(string, string)
   двоюродный_брат(string, string)
   
clauses

   мужчина("Сергей").
   мужчина("Дмитрий").
   мужчина("Валера").
   мужчина("Пётр").
   мужчина("Михаил").
   мужчина("Николай").
   мужчина("Алекс").
   мужчина("Александр").
   мужчина("Костя").
   
   женщина("Барбара").
   женщина("Анна").
   женщина("Татьяна").
   женщина("Лиза").
   женщина("Катя").   
   женщина("Юля").
   женщина("Раиса").
   женщина("Люда").
   
   родитель("Барбара", "Лиза").
   родитель("Лиза", "Алекс").
   родитель("Алекс", "Костя").
   родитель("Анна", "Катя").
   родитель("Анна", "Пётр").
   родитель("Сергей", "Катя").
   родитель("Сергей", "Пётр").
   родитель("Катя", "Юля").   
   родитель("Пётр", "Алекс"). 
   родитель("Пётр", "Александр").
   родитель("Александр", "Люда").
   родитель("Юля", "Люда").
   родитель("Татьяна", "Михаил").
   родитель("Дмитрий", "Михаил").
   родитель("Михаил", "Юля").
   родитель("Валера", "Николай").
   родитель("Николай", "Раиса").
   родитель("Раиса", "Костя").
   родитель("Лиза", "Александр").
   
   двоюродный_родственник(A, B) :-
   родитель(C, A),
   родитель(D, B),
   A <> B,
   C <> D,
   родитель(E, C),
   родитель(E, D),
   родитель(F, C),
   родитель(F, D),
   E <> F,
   женщина(E),
   мужчина(F).
   
   двоюродная_сестра(A, B) :-
   двоюродный_родственник(A, B),
   женщина(A).
   
   двоюродный_брат(A, B) :-
   двоюродный_родственник(A, B),
   мужчина(A).
     
   goal
   
   двоюродная_сестра(A, B),
   write(A, " двоюродная сестра ", B, " ") or
   двоюродный_брат(A, B),
   write(A, " двоюродный брат ", B, " ").

Поделиться