LeetCode 941. Valid Mountain Array in F#

URL

leetcode.com/problems/valid-mountain-array

Code

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

let ascend (nums: int list) =
    let rec ascend' nums prev count =
        match nums with
        | [] -> -1
        | head :: tail ->
            if head = prev then -1
            else if head < prev then count
            else ascend' tail head (count + 1)

    ascend' (List.tail nums) (List.head nums) 1

let descend (nums: int list) =
    let rec descend' nums prev =
        match nums with
        | [] -> true
        | head :: tail ->
            if head >= prev then
                false
            else
                descend' tail head

    descend' (List.tail nums) (List.head nums)

let validMountainArray (nums: int list) : bool =
    let len = nums |> List.length

    if len < 3 then
        false
    else
        let pos = ascend nums

        if pos = -1 || pos = 1 then
            false
        else
            nums |> List.skip pos |> descend