Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
如何在Ocaml中解决这个词典问题?_Ocaml - Fatal编程技术网

如何在Ocaml中解决这个词典问题?

如何在Ocaml中解决这个词典问题?,ocaml,Ocaml,给定元组列表[(“x”,3);(“num”,17);(“y”,7);(“x”,5)]创建一个字典,其中如果有相等的键,则对它们的值求和。在这个例子中,应该创建一个这样的字典 [(“x”,8);(“num”,17);(“y”,7)]字典中的顺序无关紧要 这是我尝试的代码: module MS = Map.Make(String);; let f l = List.fold_left (fun acc (key, value) -> MS.add key value acc) MS.empty

给定元组列表
[(“x”,3);(“num”,17);(“y”,7);(“x”,5)]
创建一个字典,其中如果有相等的键,则对它们的值求和。在这个例子中,应该创建一个这样的字典
[(“x”,8);(“num”,17);(“y”,7)]字典中的顺序无关紧要

这是我尝试的代码:

module MS = Map.Make(String);;
let f l = List.fold_left (fun acc (key, value) -> MS.add key value acc) MS.empty l;;
let f1 = f [("x", 3); ("num", 17); ("y", 7); ("x", 5)];;
MS.bindings f1;;

但它会不断覆盖相同键的值(输出是
[(“num”,17);(“x”,5);(“y”,7)]

您正在寻找的是Map的
更新
功能,而不是
添加

模块MS=Map.Make(字符串)
让f l=
List.fold_左
(趣味acc(关键,价值)->
MS.update键(函数部分v->部分(值+v)|无->部分值)acc)
空l女士
设f1=f[((“x”,3);(“num”,17);(“y”,7);(“x”,5)]

在这个版本中,
MS.bindings f1
将返回
[(“num”,17);(“x”,8);(“y”,7)]

在哪里进行求和?
MS.add
(键,值)
插入(即添加)字典,它不会同时添加多个值。当你插入字典中已经存在的
键时,它会被覆盖(因此你看到的结果);我不知道如何计算这些值的和,所以我只是把它们添加到字典中。我怎样才能算出总数?(TY)使用
+
运算符,例如
1+2