我想從給定列表中刪除所有重複項。使用不需要的尾部刪除列表結果中的重複項
考慮下面的代碼:
% check if the given element is in the given list
member(Element,[Element|_]).
member(Element,[_|List]):-member(Element, List).
% append the element only if it's NOT already in the input list
appending([],X,X).
appending([H|T1],Elem,[H|T2]):- appending(T1,Elem,T2).
appendHlp(ListOrg,Res,Addme):- not(member(Addme,ListOrg)),
appending(ListOrg,[Addme],Res).
appendHlp(ListOrg,Res,Addme):- member(Addme,ListOrg),
Res=ListOrg.
% remove duplicates
setify([H|T],Set):-appendHlp(Set,Output,H),
setify(T,Output).
setify([],_).
當我運行代碼:
1 ?- setify([1,2,3,3,2],X).
輸出是:
X = [1, 2, 3|_G2725]
我怎樣才能去掉尾巴?
感謝
從快速查看它必須是一個基本情況,如setify([],_)而不是setify([],[])。 – NotAUser 2013-02-19 16:48:37
@NotAUser:不,不是。當我將它改爲'setify([],[])'時,它導致了一個無限循環。 – ron 2013-02-19 16:50:02