function - OCaml 中的 Map.fold
问题描述
我正在阅读Map.fold
以下链接的文档:
val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b
这个功能类似List.fold_left
吗?我是 OCaml 的新手,发现难以解析的函数的参数描述。我的理解是Map.fold
将函数应用于地图中的条目,然后将这些条目存储在新地图或某种累加器中。这是一个正确的理解吗?我知道这'a
表示任何类型的值 - 是否'b
表示由函数转换的新值?
解决方案
Map.fold
很像List.fold_left
。请注意,List.fold_left
它本身并不会产生新的列表。它比这更通用——它在处理列表的元素时维护任何所需类型的值。
同样,在处理映射的元素时,Map.fold
增量计算任何所需类型的值(您给出的类型签名中的类型)。'b
为了完成这项工作,您提供了一个处理地图的一个元素的三个参数的函数。第一个参数是地图元素的键。第二个参数是地图元素的值。第三个参数是增量计算的当前值。函数的返回值是新的增量计算值。
处理完所有地图元素后,Map.fold
返回 type 的最终值'b
。
这是一个将列表元素与 相加的函数List.fold_left
:
let list_sum l =
List.fold_left (+) 0 l
构建地图时,您需要指定键的类型。这是一个将键为字符串的映射的值相加的函数:
module StringMap = Map.Make(String)
let map_sum m =
StringMap.fold (fun k v accum -> v + accum) m 0
推荐阅读
- snowflake-cloud-data-platform - 有没有办法将一组列转换为相同的 NUMBER(p,s) 类型,以便它们可以在 Snowflake SQL 中成为 UNPIVOT?
- c++ - deleteNode 函数似乎破坏了连接列表
- amazon-redshift - 用于红移查询持续时间的 cloudwatch 警报
- amazon-web-services - Lambda API 返回错误:网络连接。无法连接到端点
- azure - 路由消息:主题到无服务器到多队列(可能)到无服务器到多休息
- python - 使用 Python 解析混合平面文件数据以写入 xls
- dependency-injection - DbContext 实例不随依赖注入而改变
- php - 在 laravel 5.8 的 foreach 循环中存储数据
- mysql - centos7上配置MySQL8.0
- apache-spark - 从行对象中检索列值:未找到编码器