2016-03-23 23 views
0

Ich habe eine Liste von persons und parent FaktenListe aus einer Liste auswählen?

person(nameA). 
person(nameB). 
person(nameC). 

parent(parentname, children). 

Ich brauche eine Regel hasnochild(X). zu iteriert durch alle person zu schreiben, die kein Kind hat.

Dies ist, was ich bisher geschrieben habe. hasnochild(X) :- parent(Z, X). Aber es gibt den Namen der Person zurück, die ein Kind hat. Wie bekomme ich diejenigen, die kein Kind haben?

So etwas wie die ganze Liste von minus aus, was ich geschrieben habe.

Antwort

0

Sie müssen versuchen, Person (X in Ihrer Frage) mit einer Person in der Datenbank zu vereinheitlichen, dann nur erfolgreich, wenn diese Person keine Kinder hat.

Z. B .:

hasnochild(X):- 
    person(X),   % X is a Person 
    \+ parent(X, _). % with no children 

Der Aufruf von person(X) vermieden werden können, wenn Sie wissen, dass das erste Argument parent/2 eine Person ist.

+0

Darf ich wissen, was das '\ +' bedeutet? –

+0

Überprüfen Sie die Dokumentation für [\ +] (http://www.swi-prolog.org/pldoc/doc_for?object= (% 5C% 2B)/1). Es wird gelingen, wenn das Ziel nicht erfolgreich ist. – gusbro

+0

In Ordnung. Auf jeden Fall wird Ihre Antwort eine Liste von Personen geben, die ein Kind haben. Ich suche nach einer Person, die kein Kind hat. Verwenden Sie stattdessen '\ + (übergeordnetes (_, X) .') –

Verwandte Themen