:- module( ord_subset_difference, [ord_subset_difference/3] ). ord_subset_difference( [], Diff, Diff ). ord_subset_difference( [H|T], Set2, Diff ) :- ord_del_element_strict( Set2, H, Set3 ), ord_subset_difference( T, Set3, Diff ). ord_del_element_strict([Head|Tail], Element, Set) :- compare(Order, Head, Element), ord_del_element_strict(Order, Head, Tail, Element, Set). ord_del_element_strict(<, Head, Tail, Element, [Head|Set]) :- ord_del_element_strict(Tail, Element, Set). ord_del_element_strict(=, _, Tail, _, Tail).