Listen -> Rek. erweitern einer Liste je nach Ergebnis

  • Listen -> Rek. erweitern einer Liste je nach Ergebnis

    Hallo zusammen,

    ich hoffe ihr könnt mir helfen, da ich nun schon einige Tage an der gleich Aufgabe hocke ~.~.

    Also, ich soll herrausfinden welche Person am meisten geliebt wird, dafür stehen mir einige personen zur Verfügung:

    person(hans).
    person(karl).
    person(tom).
    person(tina).
    person(sonja).

    Und Prädikate:

    liebt(hans, sonja).
    liebt(tina, hans).
    liebt(sonja, tom).
    liebt(tom, sonja).

    Wer jetzt am meisten gliebt wird ist offensichtlich, aber das in Prolog zu realisieren ist nicht gerade einfach.

    Ich habe erstmal ein Prädikat, welches die Anzahl der Leute in einer Liste bestimmt, die eine Person lieben:

    grad(X, G) :- person(X), lover(LL, G), length(LL, G).

    Anschließend soll die rekursive Loverliste generiert werden, d.h. die Leute, die X lieben, sollen in die Liste und von der Liste soll später der Grad (G) generiert und bestimmt werden:

    lover(LL, X) :- person(Y), liebt(X, Y), not(member(Y, LL)), lover([Y|LL], X).

    Mein Problem liegt jetzt jedoch an der Stelle Member, ich dachte, dass das so funktionieren würde, nur, wenn ich das Programm starte, dann schiebt er die erste Person, die die übergebene Person liebt, in die Liste und vergleicht nicht ob die Person Teil der Liste (bei der ersten Person die leer Liste) ist.

    Kann mir da jemand helfen ?
    Habe ich irgendeinen Denkfehler ?

    Liebe Grüße,
    SkiD.