Prologue: La Suppression Des Doublons

Je suis en train de supprimer les doublons d'une liste en prolog. Ainsi, une liste [a,b,a,c,b,a] retour [a,b,c]. Je ne peux pas utiliser toutes les fonctions intégrées. J'ai cherché ici et j'ai trouvé ce code.

member(X,[X|_]) :- !.
member(X,[_|T]) :- member(X,T).
set([],[]).
set([H|T],[H|Out]) :- not(member(H,T)), set(T,Out).
set([H|T],Out) :- member(H,T), set(T,Out).

Mais ce serait prendre ma liste et retour [c,b,a] et non pas [a,b,c]

J'ai supprimer le code qui va prendre un élément et une liste et retourne une liste avec les occurrences de cet élément dans la liste supprimé. J'ai donc essayé de les intégrer dans mon supprimer les doublons de méthode, mais je ne comprends pas vraiment prologue très bien, donc il n'est pas de travail. Logiquement je veux faire une liste des inconvénients de la tête avec l'appel récursif sur la nouvelle liste moins toutes les occurrences de la tête. C'est ce que le code pourrait ressembler à sml.

fun remv(_,nil) = nil
|   remv(a,x::xs) = if x=a then remv(a,xs) else x::remv(a,xs);
fun remvdub (nil) = nil
|   remvdub(x::xs) = x::remvdub(remv(x,xs)); 

C'est donc ce que j'ai essayé en prolog

remv(_,[],[]).
remv(X,[X|T],Ans) :- remv(X,T,Ans).
remv(X,[H|T],[H|K]) :- remv(X,T,K). 

remvdub([],[]).
remvdub([H|T],[H|Ans]) :- remvdub(Ans1,Ans), remv(H,T,Ans1).

Ce qui me manque?

OriginalL'auteur user3043403 | 2013-11-28