Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function OCaml中的Map.fold_Function_Ocaml_Fold - Fatal编程技术网

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