Пролог: разделение списка на два списка (уникальные предметы / дубликаты предметов)

Я пытался разделить данный список на два разных списка: уникальный и дубликат. Например, если у нас есть список[1, 1, 2, 3, 3, 4, 5] Я хочу, чтобы уникальный список был[2, 4, 5] и дубликат будет[1, 3], Я не хочу, чтобы все 1 в списке были в списке дубликатов. Мне просто нужен один из них. Код у меня сейчас:

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

Используя список примеров, приведенный выше, если я бегуcompareL([1, 1, 2, 3, 3, 4, 5], Unique, Dup). Я получил:

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

Я не могу понять, почему к концу обоих списков я получаю_G1954' а также '_G1948». Любая помощь будет оценена. Благодарю.

Ответы на вопрос(4)

Ваш ответ на вопрос