Function OCaml中的Map.fold
我正在阅读下面的Function OCaml中的Map.fold,function,ocaml,fold,Function,Ocaml,Fold,我正在阅读下面的Map.fold文档: val fold:(键->a->b->b)->'a t->b->b 此功能是否与列表类似。向左折叠?我是OCaml的新手,发现函数参数的描述很难解析。我的理解是,Map.fold将函数应用于映射中的条目,然后将这些条目存储在新映射或某种累加器中。这是正确的理解吗?我知道'a表示任何类型的值,'b是否表示由函数转换的新值 Map.fold非常像List.fold\u left。请注意,List.fold_left本身不会生成新列表。它比这更一般——它在处理列
Map.fold
文档:
val fold:(键->a->b->b)->'a t->b->b
此功能是否与列表类似。向左折叠?我是OCaml的新手,发现函数参数的描述很难解析。我的理解是,
Map.fold
将函数应用于映射中的条目,然后将这些条目存储在新映射或某种累加器中。这是正确的理解吗?我知道'a
表示任何类型的值,'b
是否表示由函数转换的新值 Map.fold
非常像List.fold\u left
。请注意,List.fold_left
本身不会生成新列表。它比这更一般——它在处理列表元素时维护任何所需类型的值
类似地,Map.fold
在处理映射元素时递增地计算任何所需类型的值(您给出的类型签名中的类型'b
)
为了实现这一点,您需要提供一个包含三个参数的函数来处理映射的一个元素。第一个参数是map元素的键。第二个参数是map元素的值。第三个参数是增量计算的当前值。函数的返回值是新的增量计算值
处理完所有映射元素后,map.fold
返回类型'b
的最终值
这是一个将列表元素与列表相加的函数。向左折叠:
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