我无法弄清楚在执行转换的函数上运行聚合器所需的语法。
我有以下代码:
type Suit = | Spades| Clubs | Diamonds | Hearts
type Face = | Two | Three | Four | Five
| Six | Seven | Eight | Nine | Ten
| Jack | Queen | King | Ace
type Card = {Face:Face; Suit:Suit}
我无法编译此函数:
let getCount (hand:Card list) =
let getFaceValue face =
match face with
| Two -> 2
| Three -> 3
| Four -> 4
| Five -> 5
| Six -> 6
| Seven -> 7
| Eight -> 8
| Nine -> 9
| Ten -> 10
| Jack -> 10
| Queen -> 10
| King -> 10
| Ace -> 11
let sumOfHand = hand |> List.sum (fun c -> getFaceValue c.Face)
sumOfHand
期望支持运营商的类型' +'但是给了一个功能 类型。您可能缺少函数的参数。
为什么我会收到此错误,如何在聚合函数中使用转换?
答案 0 :(得分:4)
List.sum
采用单个参数(列表)并使用+
运算符计算所有元素的总和。
要按照应用于列表中每个元素的函数求和,请使用List.sumBy
let sumOfHand = hand |> List.sumBy (fun c -> getFaceValue c.Face)
答案 1 :(得分:2)
您应先映射然后汇总
hand |> List.map (fun x ...) |> List.sum