let array_fold2 (_func: 'a -> 'b -> 'c -> 'a) (_acc: 'a) (_array1: 'b array) (_array2: 'c array) : 'a =
let rec fold_at (index: int) (acc: 'a) : 'a =
if index >= Array.length _array1 then begin
acc
end
else begin
let new_acc =
_func acc _array1.(index) _array2.(index)
in
fold_at (index + 1) new_acc
end
in
if Array.length _array1 <> Array.length _array2 then begin
raise Exit
end
else begin
fold_at 0 _acc
end