ord_intersection([], Set2, [], Set2). ord_intersection([Head1|Tail1], Set2, Intersection, Difference) :- ord_intersection4(Set2, Head1, Tail1, Intersection, Difference). ord_intersection4(<, _, Set1, Head2, Tail2, Intersection, Difference) :- ( Set1 = [], Intersection = [], Difference = [Head2|Tail2] ; Set1 = [Head1|Tail1], compare(Order, Head1, Head2), ord_intersection4(Order, Head1, Tail1, Head2, Tail2, Intersection, Difference) ). ord_intersection4(=, Head, Tail1, _, Tail2, [Head|Intersection], Difference) :- ord_intersection(Tail1, Tail2, Intersection, Difference). ord_intersection4(>, Head1, Tail1, Head2, Set2, Intersection, [Head2|Difference]) :- ord_intersection4(Set2, Head1, Tail1, Intersection, Difference). ord_intersection4([], _, _, [], []). ord_intersection4([Head2|Tail2], Head1, Tail1, Intersection, Difference) :- compare(Order, Head1, Head2), ord_intersection4(Order, Head1, Tail1, Head2, Tail2, Intersection, Difference).