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.