2016-11-22 3 views
1

У меня есть свод правил;Prolog - Проблема с разделом в обоих направлениях

family(Mother,Father,Children). 

Где дети это список (например, [ag, bg]).

parent(X,Y) :- 
    family(X,_,_) -> mother(X,Y); father(X,Y). 

С предложением выше оно правильно дает мне детей, если я ставлю родителя. Однако, если я стану ребенком, я не могу получить родителей.

Я также попытался сделать предложение для Ребенка;

child(X,Y) :- 
    mother(A,X), 
    father(B,X), 
    Y=A,B. 

Где мать и отец работают правильно, но мне нужны обе переменные, чтобы перейти к Y.

Любые советы?

+0

Попробуйте этот родительский пункт: 'родитель (X, Y): - семейство (X, _, Y), (мать (X, Y); отец (X, Y)). ' –

+0

@bob_saginowski Я попытался, хотя, несмотря на то, что он правильно нашел обоих родителей, он возвращает false, и он не печатает их как Y = jb1, Y = rb1. – JoeBoggs

+0

И детское положение может быть усложнено: 'child (X, Y): - мать (Y, X); отец (Y, X) .' –

ответ

2

Вы могли бы упростить ребенка предиката:

child(X,Y) :- mother(Y,X); father(Y,X). 
Смежные вопросы