Sec*_*Son 0 f# tuples inline pattern-matching
创建一个带有两个参数的函数,一个整数和一个五元素的整数元组,如果元组的任何三个元素的总和大于第一个参数,则返回true,否则返回false.
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
Run Code Online (Sandbox Code Playgroud)
The*_*ght 12
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
Run Code Online (Sandbox Code Playgroud)
注意:我创建了该函数,inline因此它适用于支持comparison和支持的任何类型+.您可以删除inline并接受,例如ints.