Prolog仅删除唯一元素

我想返回一个列表,例如删除所有唯一元素的列表


remUniqueVals([1,1,2,2,3,4,4,5,6,6,6],Q).   

Q = [1,1,2,2,4,4,6,6,6].  

我的问题是目前我有返回的代码


remUniqueVals([1,1,2,2,3,4,4,5,6,6,6],Q).  

Q = [1, 2, 4, 6, 6].

这样就只返回这些非唯一值的第一个实例。这是我的代码:


remUniqueVals([], []).  

remUniqueVals([Q1|RestQ],[Q1|Xs]) :-        

   member(Q1,RestQ),  

   remUniqueVals(RestQ,Xs).  

remUniqueVals([Q1|RestQ],Xs) :-  

   remove(Q1,[Q1|RestQ], NewQ),  

   remUniqueVals(NewQ,Xs).  

我可以看到member(Q1,RestQ)它在第二次检查1,2,4时失败,因为它们现在不再在列表中,因此将其删除。我想帮助解决这个问题,我的想法是检查member(Q1, PreviousQ),这是决赛中已经存在的要素Q。不确定如何实施,尽管会有所帮助。


更新:


好的,谢谢您提出的建议,最后我最终提出了以下建议:


remUniqueVals(_,[], []).  

remUniqueVals(_,[Q1|RestQ],[Q1|Xs]) :-        

   member(Q1,RestQ), 

   remUniqueVals(Q1,RestQ,Xs).  

remUniqueVals(PrevQ,[Q1|RestQ],[Q1|Xs]) :-        

   Q1 = PrevQ, 

   remUniqueVals(PrevQ,RestQ,Xs).  

remUniqueVals(PrevQ,[_|RestQ],Xs) :-  

   remUniqueVals(PrevQ,RestQ,Xs). 


remUniqueVals(0,[4,1,1,3,2,2,5,5],Q).

Q = [1, 1, 2, 2, 5, 5].


remUniqueVals(0, [A,B,C], [1,1]).

A = 1,

B = 1,

C = 1.


米琪卡哇伊
浏览 517回答 3
3回答
打开App,查看更多内容
随时随地看视频慕课网APP