@Leeと@Tomasの回答は素晴らしいですが、もっと短い方法があります。
(a, b, c)
呼び出し時にトリプルとして渡す余裕がある場合:
let inline sumAll() = (|||>) >> List.sumBy
// usage
let predicates =
[
fun a b c -> a
fun a b c -> b * 42.0 - c
]
let ret1 = predicates |> sumAll()(1.0, 2.0, 3.0)
また、一般的です:
let predicates2 =
[
fun a b c -> c - 10
fun a b c -> a + c * 42
]
let ret2 = predicates2 |> sumAll()(1, 2, 3)
カレー引数をサポートするより読みやすい方法:
let sumAllCurried a b c = (a,b,c) |> (|||>) |> List.sumBy<_, float>
// usage
let ret3 = predicates |> sumAllCurried 1.0 2.0 3.0
List.sumBy
の型指定全体を入力するよりも短く見えるため、型パラメーターをオンに使用していることに注意してくださいf
。