Map.fold 在 OCaml 中
Map.fold in OCaml
我正在从以下 link 阅读 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
)。
为实现此目的,您提供了一个包含三个参数的函数来处理地图的一个元素。第一个参数是地图元素的键。第二个参数是地图元素的值。第三个参数是正在增量计算的当前值。函数的return值是新的增量计算值。
处理完所有地图元素后Map.fold
returns 类型的最终值'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
我正在从以下 link 阅读 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
)。
为实现此目的,您提供了一个包含三个参数的函数来处理地图的一个元素。第一个参数是地图元素的键。第二个参数是地图元素的值。第三个参数是正在增量计算的当前值。函数的return值是新的增量计算值。
处理完所有地图元素后Map.fold
returns 类型的最终值'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