Предикаты / Факты - Prolog

Вопросы по программированию, не подходящие в другие разделы.

Модераторы: Naeel Maqsudov, C_O_D_E

Ответить
olya1994
Сообщения: 10
Зарегистрирован: 13 ноя 2014, 23:27

02 дек 2016, 17:46

Всем привет написала вот такую задачку, вроде все правильно, все работает, но преподаватель сказал поправить Шурина..Но я сижу и не понимаю что с ним не так.. можете кто нибудь пожалуйста проверить правильность программы, заранее большое спасибо!
Условие задачи:
Используя предикаты parent(symbol,symbol), man(symbol), woman(symbol), married(symbol,symbol), записать факты, описывающие вашу семью. Записать 8 правил вывода для любых родственных отношений в вашей семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т.д.).
Текст:
parent("Alexandr","Olya").
parent("Masha","Olya").
parent("Alexandr","Alina").
parent("Masha","Alina").
parent("Alexandr","Leha").
parent("Masha","Leha").
parent("Leha","Gleb").
parent("Dasha","Gleb").
parent("Alina","Maks").
parent("Leha","Maks").

man("Alexandr").
man("Leha").
man("Pavel").
man("Dima").
woman("Olya").
woman("Alina").
woman("Masha").
married("Masha","Pavel").
married("Alina","Dima").

father(X,Y):-parent(X,Y),man(X),!.
mother(X,Y):-parent(X,Y),woman(X),!.
sister(X,Y):-parent(Z,X),parent(Z,Y),woman(X), X\=Y,!.
brother(X,Y):-parent(Z,Y),parent(Z,X),man(X), X\=Y,!.
son(X,Y):-parent(X,Y),man(Y),!.
daughter(X,Y):-parent(X,Y),woman(Y),!.
wife(X,Y):-married(X,Y), woman(X),!.
husband(X,Y):-married(X,Y),man(Y),!.
shurin(X,Y):-man(Y),married(Z,Y),brother(X,Z),!.
tesha(X,Y):-married(Z,Y),mother(X,Z),!.
dyadya(X,Y):-parent(Z,Y),brother(X,Z),!.

?-father(X,"Olya"),write(X),write(" ").
?-mother(X,"Alina"),write(X),write(" ").
?-married("Alina","Dima"),write(" ").
?-husband("Masha",Y),write(Y),write(" ").
?-wife(X,"Pavel"),write(X),write(" ").
?-sister("Olya","Alina"),write(" ").
?-shurin(X,"Dima"),write(X),write(" ").
?-tesha(X,"Dima"),write(X),write(" ").
?-dyadya(X,"Maks"),write(X),write(" ").
Ответить