2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Пролог, построение геналогического дерева
Сообщение03.04.2014, 11:38 


07/10/12
5
Здравствуйте! Нужно представить в программе генеалогическое дерево. И определить такие сущности как сестра, правнучка, двоюродная тетя, (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.

Изображение

 Профиль  
                  
 
 Re: Пролог, построение геналогического дерева
Сообщение19.04.2014, 16:34 
Заслуженный участник


27/04/09
28128
art2123 в сообщении #844889 писал(а):
но, например, на правнучку выдает только "Валерия правнучка Василий"(хотя еще должно и выдавать "Валерия правнучка Анна")
Конечно, неправильно — у вас определение правнучки слишком длинное. Не все правнучки попадают в ваше определение. Правнучка = внучка ребёнка = дочь ребёнка ребёнка = ребёнок ребёнка ребёнка женского пола — и никаких супругов не упоминается. Убрав лишнее, вы уменьшите влияние других сомнительных ходов в реализации и, возможно, этот предикат станет работать правильно.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group