2014-12-02 91 views
1

請給出一些關於在Prolog中截取三個列表的建議嗎?Prolog三個列表的交集

我做過攔截兩個列表:

prunik([], _, []). 

prunik([H1|T1], L2, [H1|Res]) :- 
    member(H1, L2), 
    prunik(T1, L2, Res). 

prunik([_|T1], L2, Res) :- 
    prunik(T1, L2, Res). 

和它的作品,當我把這個問題:

prunik([1,3,5,2,4], [6,1,2], X). 

我嘗試翻拍這三個名單,但我真的不知道。有什麼建議嗎?

回答

1

您的相交的兩個列表代碼有點故障,看到最後三個答案:

?- prunik([1,3,5,2,4], [6,1,2], X). 
X = [1, 2] ; 
X = [1] ; 
X = [2] ; 
X = []. 

但是,如果你想擴展您的代碼在三個列表工作:

prunik([], _, _, []). 

prunik([H1|T1], L2, L3, [H1|Res]) :- 
    member(H1, L2), 
    member(H1, L3), 
    prunik(T1, L2, L3, Res). 

prunik([_|T1], L2, L3, Res) :- 
    prunik(T1, L2, L3, Res). 

樣品輸入/輸出:

?- prunik([1,2,3], [3,2,4,5,6], [2,3,4], R). 
R = [2, 3] ; 
R = [2] ; 
R = [3] ; 
R = [].