Prolog: dzielenie listy na dwie listy (unikalne przedmioty / duplikaty)

Próbowałem podzielić daną listę na dwie różne listy: Unique i Duplicate. Na przykład, jeśli mamy listę[1, 1, 2, 3, 3, 4, 5] Chcę, żeby lista unikalna była[2, 4, 5] i Duplikat[1, 3]. Nie chcę, aby wszystkie 1-ki na liście znajdowały się na liście Duplikat. Potrzebuję tylko jednego. Kod, który mam teraz:

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).

Używając przykładowej listy podanej powyżej, jeśli uruchomięcompareL([1, 1, 2, 3, 3, 4, 5], Unique, Dup). Dostaję:

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

Nie mogę zrozumieć, dlaczego pod koniec obu list dostaję_G1954' i '_G1948” Każda pomoc byłaby doceniana. Dzięki.

questionAnswers(4)

yourAnswerToTheQuestion