首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Map.fold in OCaml

Map.fold in OCaml
EN

Stack Overflow用户
提问于 2018-09-28 00:44:24
回答 1查看 3.3K关注 0票数 1

我从下面的Map.fold阅读了链接的文档

val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b

这个函数与List.fold_left类似吗?我是OCaml的新手,发现函数的参数描述很难解析。我的理解是,Map.fold将函数应用于映射中的条目,然后将这些条目存储在新的映射或某种累加器中。这是正确的理解吗?我知道'a表示任何类型的值-- 'b是否意味着一个由函数转换的新值?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-28 01:02:54

Map.fold非常像List.fold_left。请注意,List.fold_left本身并不产生新的列表。它比这更普遍--它在处理列表元素时,保持一个任意类型的值。

类似地,Map.fold在处理映射的元素时,递增地计算任何所需类型的值(您给出的类型签名中的'b类型)。

要使此操作,需要提供一个由三个参数组成的函数,这些参数处理映射的一个元素。第一个参数是map元素的键。第二个参数是map元素的值。第三个参数是增量计算的当前值。函数的返回值是新的增量计算值。

在处理完所有映射元素之后,Map.fold返回'b类型的最终值。

下面是一个函数,它将列表中的元素与List.fold_left相加

代码语言:javascript
复制
let list_sum l =
    List.fold_left (+) 0 l

在构建映射时,需要指定键的类型。下面是一个函数,它将键为字符串的映射的值相加:

代码语言:javascript
复制
module StringMap = Map.Make(String)

let map_sum m =
    StringMap.fold (fun k v accum -> v + accum) m 0
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52546827

复制
相关文章

相似问题

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