首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在转换中使用List.sum

无法在转换中使用List.sum
EN

Stack Overflow用户
提问于 2015-12-27 13:35:35
回答 2查看 44关注 0票数 0

我无法确定在执行转换的函数上运行聚合器所需的语法。

我有以下代码:

代码语言:javascript
运行
复制
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}

我无法编译这个函数:

代码语言:javascript
运行
复制
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

期望一个支持运算符'+‘的类型,但给定一个函数类型。您可能缺少一个函数的参数。

为什么我会得到这个错误,如何使用聚合函数中的转换呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-27 13:45:55

List.sum只接受一个参数(一个列表),并使用+运算符计算所有元素的和。

若要通过应用于列表中每个元素的函数求和,请使用List.sumBy

代码语言:javascript
运行
复制
let sumOfHand = hand |> List.sumBy (fun c -> getFaceValue c.Face)
票数 4
EN

Stack Overflow用户

发布于 2015-12-27 13:36:49

你应该先映射然后和

代码语言:javascript
运行
复制
hand |> List.map (fun x ...) |> List.sum
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34480937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档