LeetCode 88. Merge Sorted Array in F#

URL

leetcode.com/problems/merge-sorted-array

Code

github.com/syohex/dotnet-study/blob/master/..

let merge (nums1: int []) (m: int) (nums2: int []) (n: int) : unit =
    let rec merge' (nums1: int []) (m: int) (nums2: int []) (n: int) : int [] =
        if m = 0 && n = 0 then
            nums1
        else
            let index = m + n - 1

            match m > 0, n > 0 with
            | true, true ->
                if nums1.[m - 1] >= nums2.[n - 1] then
                    nums1.[index] <- nums1.[m - 1]
                    merge' nums1 (m - 1) nums2 n
                else
                    nums1.[index] <- nums2.[n - 1]
                    merge' nums1 m nums2 (n - 1)
            | true, false ->
                nums1.[index] <- nums1.[m - 1]
                merge' nums1 (m - 1) nums2 n
            | false, true ->
                nums1.[index] <- nums2.[n - 1]
                merge' nums1 m nums2 (n - 1)
            | false, false -> failwith "never reach here"

    let _ = merge' nums1 m nums2 n
    ()