struct
let fold_left2 = fun f init a1 a2 ->
if Array.length a1 <> Array.length a2 then
invalid_arg "Misc.Array.fold_left2: arrays don't have same size";
let result = ref init in
for i = 0 to (Array.length a1) - 1 do
result := f !result a1.(i) a2.(i)
done;
!result
let combine = fun a1 a2 ->
if Array.length a1 <> Array.length a2 then
invalid_arg "Misc.Array.combine: arrays don't have same size";
Array.init (Array.length a1) (fun i -> (a1.(i), a2.(i)))
end