nof*_*aki 7 list prolog duplicates
我需要编写一个程序来查找两个列表的交集.我不能使用剪切,结果列表中不应该有任何重复的元素.
这是我的代码:
intersection([],_,[]).
intersection([X|Xs],Y,[X|Zs]) :-
member(X,Y),
intersection(Xs,Y,Zs).
intersection([_|Xs],Y,Zs) :-
intersection(Xs,Y,Zs).
Run Code Online (Sandbox Code Playgroud)
当我运行以下查询时,我得到以下答案:
?- intersection([a,b,c,a],[a,v,c],L).
L = [a, c, a] ;
L = [a, c] ; % <---------- this is only answer I want to get
L = [a, a] ;
L = [a] ;
L = [c, a] ;
L = [c] ;
L = [a] ;
L = [].
Run Code Online (Sandbox Code Playgroud)
我能做什么?我想得到L = [a,c]什么别的......你能帮忙吗?
在我对相关问题" 2个列表的交集和并集 "的回答中,我提出了逻辑上纯的谓词list_list_intersectionSet/3.它应该符合您对T的要求!
这是一个刷新版本list_list_intersectionSet/3,它基于:
if_/3,tfilter/3,dif/3和memberd_t/3.开始了:
list_list_intersectionSet([] ,_ ,[]).
list_list_intersectionSet([A|As0],Bs,Cs0) :-
if_(memberd_t(A,Bs), Cs0 = [A|Cs], Cs0 = Cs),
tfilter(dif(A),As0,As),
list_list_intersectionSet(As,Bs,Cs).
Run Code Online (Sandbox Code Playgroud)
让我们看看它在行动!
?- list_list_intersectionSet([a,b,c,a],[a,v,c],L).
L = [a,c].
Run Code Online (Sandbox Code Playgroud)