let split_map f l = let rec aux acc1 acc2 = function | [] -> (acc1, acc2) | hd :: tl -> let (a, b) = f hd in aux (a :: acc1) (b :: acc2) tl in aux [] [] l