在 F# 中使用模式匹配的最佳方式是什么?

What's the best way to use pattern matching in F#?

创建一个接受两个参数的函数,一个整数和一个五元素整数元组,returns 如果元组中任意三个元素的总和大于第一个参数,则为真,否则为假。

let func el tupl =
    match tupl with
    |(a,b,c,d,e) when (a+b+c) > el || (a+d+e) > el || (b+c+d)> el || (b+c+e) > el -> true
    | _-> false

在这种情况下使用显式 match 表达式并没有真正的优势,您可以按照您在问题中建议的那样使用 when 守卫来解决问题,但它会转移很多给你的思想负担。

这是一个替代方案:

let inline func el (a,b,c,d,e) =
    let sum3 = 
        [a; b; c; d; e] // create a list of elements
        |> List.sortDescending // sort list by descending
        |> List.take 3 // take the 3 largest elements
        |> List.sum // sum them
    sum3 > el // if not true for 3 largest, it's not true for any

注意:我创建了函数 inline,因此它可以与任何支持 comparison+ 的类型一起使用。您可以删除 inline 并只接受,例如 ints。