Prólogo: dividir una lista en dos listas (elementos únicos / elementos duplicados)

He estado tratando de dividir una lista dada en dos listas diferentes: Única y Duplicar. Por ejemplo, si tenemos la lista.[1, 1, 2, 3, 3, 4, 5] Quiero que la lista Única sea[2, 4, 5] y duplicar para ser[1, 3]. No quiero que todos los 1 de la lista estén en la lista de Duplicados. Solo necesito uno de eso. El código que tengo ahora mismo:

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

Usando la lista de ejemplos dada arriba si ejecutocompareL([1, 1, 2, 3, 3, 4, 5], Unique, Dup). Yo obtengo:

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

No puedo entender por qué hacia el final de ambas listas me estoy poniendo '_G1954'y'_G1948'. Cualquier ayuda sería apreciada. Gracias.

Respuestas a la pregunta(4)

Su respuesta a la pregunta