2016-11-22 2 views
1

Ich habe eine Reihe von Regeln;Prolog - Problem mit Klausel geht in beide Richtungen

family(Mother,Father,Children). 

Wo Kinder ist eine Liste (z [ag, bg]).

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

Mit der obigen Klausel gibt es mir richtig die Kinder, wenn ich ein Elternteil einlege. Wenn ich jedoch ein Kind hineinsetze, kann ich die Eltern nicht bekommen.

Ich habe auch versucht, eine Klausel für Child zu machen;

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

Wo Mutter und Vater arbeiten korrekt, aber ich brauche beide Variablen auf Y zu gehen.

Irgendwelche Ratschläge?

+0

Versuchen Sie, diese Klausel parent: 'Mutter (X, Y): - Familie (X, _, Y), (Mutter (X, Y), Vater (X, Y)). ' –

+0

@bob_saginowski Ich habe versucht, dass, obwohl es beide Eltern richtig findet, es falsch zurückgibt und es sie nicht als Y = jb1, Y = rb1 ausdruckt. – JoeBoggs

+0

Und Kind-Klausel könnte vervielfältigt werden: 'Kind (X, Y): - Mutter (Y, X); Vater (Y, X) .' –

Antwort

2

Sie könnten das Kind Prädikat vereinfachen:

child(X,Y) :- mother(Y,X); father(Y,X). 
Verwandte Themen