Страницы

Поиск по вопросам

воскресенье, 16 июня 2019 г.

Не могли бы Вы помочь осознать, в чем у меня ошибка в коде на языке Prolog?

Не могли бы Вы помочь осознать, в чем у меня ошибка в коде? Очень нужно разобраться..
Задача: Описать на Прологе базу знаний, содержащую следующую информацию: Факты:
Алексей – сын Юрия, Юрий – сын Ивана, Сергей – сын Ивана, Александр – сын Ивана, Павел – сын Сергея.
Правила:
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).
Вроде бы всё логично, должно скомпилироваться и выдать результат, но почему-то выдает ошибки.. Не понимаю, что не так..


Ответ

Сразу стоит заметить, что здесь решать задачи за вас не будут. Теперь по сути. Очевидно, что у вас нет предиката X(Y,Z), который бы приводил в соответствие каждой ситуации родства слово кем является Y для Z.
Пример такого предиката:
Who(Y,Z,X):-brother(Y,Z), X="brother", Who(Y,Z,X):-father(Y,Z), X="father", ...
И так описать все возможные ситуации для этого предиката, не забыть и про племянников и внуков. Разумеется, код может быть не рабочим, так как для Prolog уйма различных вариаций интерпретаторов языка.
Но идея общая дана.
P.S. В том интерпретаторе с которым работал я должен был быть только один goal, не уверен насчёт вашего.

Комментариев нет:

Отправить комментарий