Я пытаюсь создать предикат, который удаляет дубликаты из списка, сохраняя его относительный порядок. Например, список [1,2,2,3,4,5,5,2] должен возвращать [1,2,3,4,5]. Тем не менее, мой код может удалить только последовательные дубликаты и, например, не 2 в конце.
remove_duplicates([],[]).
remove_duplicates([H],[H]).
remove_duplicates([H,H|T],[H|List]) :- remove_duplicates(T,List).
remove_duplicates([H,X|T],[H|T1]):- X\=H, remove_duplicates([X|T],T1).
Другим подходом, о котором я думал, было использование члена, чтобы увидеть, содержит ли Хвост Голову. Тем не менее, я могу думать только о том, чтобы решить эту проблему, когда я уберу голову, если голова - это член хвоста. Это, однако, сохранит только последний экземпляр числа и нарушит относительный порядок чисел в списке.
Например:
[1,2,2,3,4,5,5,2]
[1,3,4,5,2]
Когда я действительно хочу
[1,2,3,4,5]