Здравствуйте! Нужно представить в программе генеалогическое дерево. И определить такие сущности как сестра, правнучка, двоюродная тетя, (N)-юродная племянница, деверь [брат мужа].
Я попробовал написать, но, например, на правнучку выдает только "Валерия правнучка Василий"(хотя еще должно и выдавать "Валерия правнучка Анна"), а на сестру "Валерия сестра Эдуард"(хотя еще должно выдавать "Марина сестра Лена")
Где я неправ?
Код:
DOMAINS
имя=string
PREDICATES
родители(имя,имя)
женщина(имя)
мужчина(имя)
супруги(имя,имя)
сестра(имя,имя)
двоюродная_сестра(имя,имя)
троюродная_сестра(имя,имя)
двоюродная_племянница(имя,имя)
троюродная_племянница(имя,имя)
двоюродная_тетя(имя,имя)
деверь(имя,имя)
правнучка(имя,имя)
clauses
родители("Арина","Артем").
родители("Эдуард","Артем").
родители("Лена","Эдуард").
родители("Антон","Эдуард").
родители("Лена","Валерия").
родители("Антон","Валерия").
родители("Галина","Марина").
родители("Петр","Марина").
родители("Галина","Лена").
родители("Петр","Лена").
родители("Василий","Петр").
родители("Анна","Петр").
родители("Василий","Вадим").
родители("Анна","Вадим").
родители("Вадим","Вера").
родители("Ирина","Вера").
родители("Константин","Максим").
родители("Вера","Максим").
родители("Константин","Сэлвин").
родители("Вера","Сэлвин").
женщина("Анна").
женщина("Ирина").
женщина("Вера").
женщина("Галина").
женщина("Марина").
женщина("Лена").
женщина("Арина").
женщина("Валерия").
женщина("Оксана").
мужчина("Василий").
мужчина("Вадим").
мужчина("Константин").
мужчина("Максим").
мужчина("Сэлвин").
мужчина("Петр").
мужчина("Антон").
мужчина("Эдуард").
мужчина("Артем").
супруги("Василий","Анна").
супруги("Вадим","Ирина").
супруги("Константин","Вера").
супруги("Петр","Галина").
супруги("Антон","Лена").
супруги("Эдуард","Арина").
супруги("Артем","Оксана").
сестра(Y,X):-родители(Z,Y),родители(Z,X),женщина(Y),X<>Y.
двоюродная_сестра(Y,X):-родители(Z,X),сестра(Z,F),родители(F,Y),женщина(Y).
троюродная_сестра(Y,X):-родители(Z,X),родители(F,Z),сестра(F,N),родители(N,L),родители(L,Y),женщина(Y).
двоюродная_племянница(Y,X):-двоюродная_сестра(X,Z),родители(Z,Y).
троюродная_племянница(Y,X):-троюродная_сестра(X,Z),родители(Z,Y).
деверь(Y,X):- родители(Z,K), родители( Z,Y), супруги(X,K), мужчина(Y).
правнучка(Y,X):- родители(Z,Y), родители(K,Z), родители(X,K),родители(F,K),супруги (X,F), супруги(F,X), женщина(Y).
двоюродная_тетя(Y,X):- родители(Z,X), родители(K,Z), сестра(K,L), родители(L,Y), женщина(Y).
goal
сестра(Y,X),write(Y," сестра ",X),nl;
правнучка(Y,X),write(Y," правнучка ",X),nl.
двоюродная_племянница(Y,X),write(Y," двоюродная племянница ",X),nl;
троюродная_племянница(Y,X),write(Y," троюродная племянница ",X),nl;
деверь(Y,X),write(Y," деверь ",X),nl;
двоюродная_тетя(Y,X),write(Y," двоюродная тетя ",X),nl.