как достать прапрабабушку в прологе - PullRequest
0 голосов
/ 16 апреля 2020

Я новичок в прологе. Я пытаюсь написать семейное древо. Я получил код, чтобы получить родитель, мать, отца, сестру, брата и т. Д. c .. Я пытаюсь написать код, чтобы получить отличный прабабушка / с

У меня есть этот код, чтобы получить прабабушку / с:

great_grandmother(X,Y) :- parent(X,V), parent(V,W), parent(W,Y), female(X).

однако я много раз пытался получить прапрабабушку / с, но это не работает. Как бы я изменил свой код, чтобы получить пра-прабабушку / с?

, а также, когда я запускаю свой код на swi sh .swi, я получаю всех правильных прабабушек, но программа продолжает работать и выдает мне ложь. Можно ли как-нибудь исправить это на основе моего кода, чтобы получить прабабушек?

1 Ответ

0 голосов
/ 18 апреля 2020

Ваш код основан на подходе, согласно которому прабабушка по сути является матерью родителя родителя. Точно так же прапрабабушка была бы матерью родителя родителя родителя:

great_great_grandmother(X,Z) :- parent(X,V), parent(V,W), parent(W,Y), parent(Y,Z), female(X).

Чтобы разбить этот лог c, вы можете ограничить все парами бинарные отношения, такие, что прародитель является родителем родителя, прадедушка является родителем прародителя, и т. д. c., как в:

parent(X,Y) :- child(Y,X).
grandparent(X,Y) :- parent(X,Y), parent(Y,Z).
great_grandparent :- parent(X,Y), grand_parent(Y,Z).
great_great_grandparent(X,Y) :- parent(X,Y), great_grandparent(Y,Z).

А потом пра-пра-пра бабушка - это просто женщина, пра-пра-прадедушка:

great_great_grandmother(X,Y) :- great_great_grandparent(X,Y), female(X).

Что касается того, почему вы не получаете решения для своего запроса, все зависит от того, что в ваших фактах. Либо ваш предикат great_great_grandparent плохо сформирован, либо в вашей модели нет сущностей с таким определением, либо и то и другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...