我想通过在给定列表中选择多个元素(而不是一个)来改进序言中的select/3。例如,如果我在此列表中选择X = 1和Y = 2 [1,2,3],那么结果将是[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]。我知道我必须以某种方式将这两个值相交;因此,这里是 intersect 方法:
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).
我想我必须以某种方式使用 intersect 方法而不是成员方法。
有人可以帮帮我吗?