intersection(nil,Y,nil) intersection(X!L,M,X!N) :- mem(X,M) & intersection(L,M,N) intersection(X!L,M,N) :- ~mem(X,M) & intersection(L,M,N) mem(X,X!L) mem(X,Y!L) :- mem(X,L) union(nil,Y,Y) union(X!L,M,N) :- mem(X,M) & union(L,M,N) union(X!L,M,X!N) :- ~mem(X,M) & union(L,M,N)