请提供一些关于在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).
我尝试重拍三个列表,但我真的不知道。请问有什么建议吗?
答案 0 :(得分:1)
交叉两个列表的代码有点错误,请参阅最后3个答案:
?- 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 = [].