特定のリストで (1 つではなく) 複数の要素を選択することで、prolog のselect/3を改善したいと考えています。たとえば、このリスト[1,2,3]でX = 1とY = 2を選択すると、結果は[3]になります。
これが私がこれまでに持っているものです:
select_pair(X,Y,[X|Xs],Xs) :- member(Y,Xs).
select_pair(X,Y,[H|T1],[H|T2]) :- select_pair(X,Y,T1,T2).
結果は次のとおりです。
?- select_pair(X,Y,[1,2,3],Zs).
X = 1,
Y = 2,
Zs = [2, 3] ;
X = 1,
Y = 3,
Zs = [2, 3] ;
X = 2,
Y = 3,
Zs = [1, 3] ;
ただし、正しい結果は Zs = [3]、[2]、[1] である必要があります。この 2 つの値をどうにかして交差させなければならないことはわかっています。したがって、交差メソッドは次のとおりです。
intersect([],M,[]).
intersect([X|L],M,[X|I]) :- member(X,M), intersect(L,M,I).
intersect([X|L],M,I) :- \+ member(X,M), intersect(L,M,I).
メンバーメソッドの代わりに交差メソッドを使用する必要があると思います。
誰か助けてくれませんか?