Prolog,过滤重复项,同时保持列表顺序

Prolog,过滤重复项,同时保持列表顺序,prolog,Prolog,我正在尝试制定一个名为superssecho(a,B)的规则,a是包含重复项的列表,B是不包含重复项的列表。使用“排序”可以删除重复项,但也可以按alpha顺序对其进行排序。到目前为止,我所做的是: supressEchos([],[]) :-!. supressEchos(A,B) :- supressHelp(A, [], B). supressHelp([], A, A) :- !. supressHelp([A | Tail],List, B) :- member

我正在尝试制定一个名为
superssecho(a,B)
的规则,
a
是包含重复项的列表,
B
是不包含重复项的列表。使用“排序”可以删除重复项,但也可以按alpha顺序对其进行排序。到目前为止,我所做的是:

supressEchos([],[]) :-!.  
supressEchos(A,B) :- supressHelp(A, [], B). 

supressHelp([], A, A) :- !.  
supressHelp([A | Tail],List, B) :-  
    member(A,List),  
    supressHelp(Tail, List, B),!.  
supressHelp([A | Tail],List, B) :-  
    supressHelp(Tail,[A|List], B), !. 
这将返回没有重复项的列表,但与我在前面添加新的非重复项的顺序相反。我该如何将其添加到我的列表的末尾,或者我应该做一个
反向(a,B)
来提供帮助

supressEcho([a,a,a,b,b,c],X)
返回
X=[c,b,a]。

%%The answer to my issue was to implement reverse(A,B).  
reverse([],A,A) :- !.  
reverse([A|Tail],B, C) :- reverse(Tail, [A|B], C).  
supressEchos([],[]) :-!.  
supressEchos(A,B) :- supressHelp(A, [], B).  

supressHelp([], A, B) :- reverse(A,B).  
supressHelp([A | Tail],List, B) :-  
member(A,List),
supressHelp(Tail, List, B),!.
supressHelp([A | Tail],List, B) :-
supressHelp(Tail,[A|List], B), !.  
显然有更好的方法来实现这一点,但如果有人需要快速修复,那就来吧

有一个(不推荐使用的)谓词/3可以帮助:

supressEchos([],[]).
supressEchos([A|Tail],[A|B]) :-
    delete(Tail,A,R),
    supressEchos(R,B).