2014-12-02 11 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
두 목록을 교차에 대한 귀하의 코드가 약간 결함이

, 지난 3 개 답변 참조 :

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,3,5,2,4], [6,1,2], X). 
X = [1, 2] ; 
X = [1] ; 
X = [2] ; 
X = []. 

을하지만, 샘플 입출력 :

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