1

Prolog での 3 つのリストのインターセプトについてアドバイスをお願いします。

私は2つのリストのインターセプトを行いました:

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).

これを 3 つのリスト用に作り直そうとしましたが、よくわかりません。何かアドバイスをお願いします。

4

1 に答える 1

1

2 つのリストを交差させるためのコードに少し誤りがあります。最後の 3 つの回答を参照してください。

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

ただし、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,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 に答える