Не могли бы Вы помочь осознать, в чем у меня ошибка в коде? Очень нужно разобраться..
Задача:
Описать на Прологе базу знаний, содержащую следующую информацию:
Факты:
- Алексей – сын Юрия,
- Юрий – сын Ивана,
- Сергей – сын Ивана,
- Александр – сын Ивана,
- Павел – сын Сергея.
Правила:
- X является отцом Y, если Y – сын X
- X является братом Y, если это два разных человека, но оба являются сыновьями одного и того же человека
- X является дядей Y, если отцом Y является Z, а X и Z – братья
- X является дедушкой Y, если X – отец Z, а Z – отец Y
Сформулировать цели и ответить на следующие вопросы:
- Вывести список братьев Сергея
- Как зовут дедушку Павла?
- Кем приходится Сергей Алексею?
predicates
nondeterm son(string,string) /*who, whose*/
nondeterm father(string,string) /*who, whose*/
nondeterm brother(string,string) /*who, whose*/
nondeterm uncle(string,string) /*(who, whose*/
nondeterm grandfather(string,string) /*who, whose*/
clauses
%Facts
son(aleksej,yurij).
son(yurij,ivan).
son(sergej,ivan).
son(alexandr,ivan).
son(pavel,sergej).
%Rules
father(X,Y):-son(Y,X).
brother(X,Y):-X<>Y,father(Z,X),father(Z,Y).
uncle(X,Y):-father(Z,Y), brother(X,Z),brother(Z,X).
grandfather(X,Y):-father(X,Z),father(Z,Y).
goal
brother(X,sergej).
grandfather(X,pavel).
X(sergej,aleksej).
Вроде бы всё логично, должно скомпилироваться и выдать результат, но почему-то выдает ошибки..
Не понимаю, что не так..
brother(X,Z),brother(Z,X)- у тебя же без разницы в каком порядке аргументы передавать – Grundy Nov 08 '16 at 07:06Xя уже говорил – Grundy Nov 08 '16 at 07:25