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.