在 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
并只接受,例如 int
s。
创建一个接受两个参数的函数,一个整数和一个五元素整数元组,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
并只接受,例如 int
s。