1

请给你们一些关于在 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).

我尝试重新制作三个列表,但我真的不知道。请问有什么建议吗?

4

1 回答 1

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 = [].
于 2014-12-02T11:17:05.437 回答