Prolog: Aufteilen einer Liste in zwei Listen (eindeutige Elemente / doppelte Elemente)

Ich habe versucht, eine bestimmte Liste in zwei verschiedene Listen aufzuteilen: Unique und Duplicate. Zum Beispiel, wenn wir die Liste haben[1, 1, 2, 3, 3, 4, 5] Ich möchte die Unique-Liste haben[2, 4, 5] und Duplizieren zu sein[1, 3]. Ich möchte nicht, dass alle Einsen in der Liste in der Duplikatliste stehen. Ich brauche nur eine davon. Den Code habe ich gerade:

compareL([_|[]], Unique, Dup).    
compareL([X3,Y3 | Tail], [X3 | Unique], Dup) :-
    X3 =\= Y3,
    compareL([Y3 | Tail], Unique, Dup). 
compareL([X3,Y3 | Tail], Unique, [X3 | Dup]) :- 
    X3 = Y3,
    skipDups(X3, Tail, Unique, Dup).

skipDups(_, [], Unique, Dup).   
skipDups(X3,[Y3 | Tail], Unique, Dup) :- 
    X3 =\= Y3,
    compareL([Y3 | Tail], Unique, Dup).
skipDups(X3,[Y3 | Tail], Unique, Dup) :-
    X3 = Y3,
    skipDups(X3, Tail, Unique, Dup).

Verwenden Sie die oben angegebene Beispielliste, wenn ich laufecompareL([1, 1, 2, 3, 3, 4, 5], Unique, Dup). Ich bekomme:

Unique = [2, 4|_G1954],
Dup = [1, 3|_G1948].

Ich kann nicht herausfinden, warum ich gegen Ende beider Listen "_G1954' und '_G1948'. Jede Hilfe wäre dankbar. Vielen Dank.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage