[],l
| l,[] -> l
| ({S.uri = uri1} as entry1)::tl1,
- ({S.uri = uri2} as entry2)::_ when uri1 < uri2 || entry1 < entry2 ->
+ ({S.uri = uri2} as entry2)::_ when uri1 < uri2 ->
entry1::(union_ex tl1 l2)
| ({S.uri = uri1} as entry1)::_,
- ({S.uri = uri2} as entry2)::tl2 when uri2 < uri1 || entry2 < entry1 ->
+ ({S.uri = uri2} as entry2)::tl2 when uri2 < uri1 ->
entry2::(union_ex l1 tl2)
| entry1::tl1,entry2::tl2 -> (* same entry *)
- entry1::(union_ex tl1 tl2)
+ if entry1 = entry2 then (* same attributes *)
+ entry1::(union_ex tl1 tl2)
+ else
+ assert false
;;
let union_ex l1 l2 =
let ll1 = string_of_int (List.length l1) in
let ll2 = string_of_int (List.length l2) in
let diff = string_of_float (after -. before) in
- prerr_endline ("UNION(" ^ ll1 ^ "," ^ ll2 ^ "): " ^ diff ^ "s") ;
- flush stderr ;
+ print_endline ("UNION(" ^ ll1 ^ "," ^ ll2 ^ "): " ^ diff ^ "s") ;
+ flush stdout ;
res
;;