Comment supprimer les doublons d'une liste en SWI-Prolog?

Donc j'ai besoin d'écrire un prédicat remove_duplicates/2 qui supprime les éléments en double forme d'une liste donnée. Par exemple:

?- remove_duplicates([a,a,b,c,c], List).
List = [a,b,c]
Yes

Veuillez garder à l'esprit que je suis en train d'apprendre SWI-Prolog pour deux jours et seulement comprendre les principes de base de Prolog. C'est ce que j'ai en ce moment:

remove_duplicates([H | T], List) :-
member(H, T),
append(T, [], List1).

Cela fonctionne pour la liste [a,a,b,c] mais pas pour des listes où les deux éléments de la queue sont les mêmes. J'ai pensé que j'ai en quelque sorte pour retirer la Tête d'une liste temporaire, de créer une nouvelle Tête et il suffit de répéter le prédicat. Je n'ai aucune idée de comment faire cela. Aussi, lorsque la Tête n'est pas dans la Queue, par exemple avec des listes de ce genre [a,b,b,c,], le terminal juste dit False, parce que member(H, T) n'est pas vrai.

Des idées?

Double Possible de Supprimer les doublons dans la liste (Prolog)
Il y a beaucoup de semblables questions et réponses sur l' [prologue] tag, toutefois, je ne suis pas sûr si le projet (et acceptées) les solutions sont nécessairement que les grands. Je ne prétends pas que ma réponse ci-dessous est mieux, mais au moins ça montre une approche différente.
Vous avez raison, il y a beaucoup de impures des solutions à ce problème. J'ai pris la question " d'où au moins une solution (celle de @repeat), a travaillé pour les non-rez-de-termes. Je considère votre solution mieux adaptée pour les débutants, car il ne repose pas sur la réification.

OriginalL'auteur Marthijn | 2016-09-11