% library(ord_lists) list_to_ord_set( List, Set ) :- list_to_set( List, Set ). % ord_add_elem( OrdSet, Elem, OrdSet1 ). % this assumes ordered SETS ie dont add element if % it exists but succeed all the same... % maybe this can be implemented as a tree ? % ord_add_element( [], Elem, [Elem] ). ord_add_element( [H|T], Elem, [H1|T1] ) :- ( H @>= Elem -> ( H = Elem -> H1 = H, T1 = T ; H1 = Elem, T1 = [H|T] ) ; H1 = H, ord_add_element( T, Elem, T1 ) ). % ord_add_element( List, Elem, NewList ) :- % merge_set( [Elem], List, NewList ). ord_member( Elem, [H|T] ) :- Elem @> H, !, ord_member( Elem, T ). ord_member( Elem, [Elem|_T] ). ord_del_element( List, Elem, NewList ) :- subtract( List, [Elem], NewList ). ord_intersection( Set1, Set2, Set3 ) :- intersection( Set1, Set2, Set3 ). ord_intersection( Set1, Set2, Intersection, Difference ) :- intersection( Set1, Set2, Intersection ), subtract( Set2, Set1, Difference ). ord_union( Set1, Set2, Set3 ) :- merge_set( Set1, Set2, Set3 ). % union( Set1, Set2, Set3 ). % swi union/3 requires no duplicated but no % order