我一直在尝试将给定列表拆分为两个不同的列表:唯一列表和重复列表。例如,如果我们有一个列表,[1, 1, 2, 3, 3, 4, 5]
我希望 Unique list 是[2, 4, 5]
并且 Duplicate 是[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
'。任何帮助,将不胜感激。谢谢。