OCaml:List.fold\u是如何工作的?
我想找出一系列浮动的平均值OCaml:List.fold\u是如何工作的?,list,floating-point,ocaml,List,Floating Point,Ocaml,我想找出一系列浮动的平均值 let avg l = List.fold_left ( +. ) 0 l /. List.length l;; List.fold_left如何工作?(将第一个参数应用于列表(第三个参数)…但第二个参数是什么?) Toplevel返回此错误: Characters 43-44: List.fold_left ( +. ) 0 l /. List.length l;; ^ Error:
let avg l =
List.fold_left ( +. ) 0 l /. List.length l;;
List.fold_left如何工作?(将第一个参数应用于列表(第三个参数)…但第二个参数是什么?)
Toplevel返回此错误:
Characters 43-44:
List.fold_left ( +. ) 0 l /. List.length l;;
^
Error: This expression has type int but is here used with type float
在OCaml中迭代列表的首选方式是什么?第二个参数是累加器的初始值。对于左折叠,您可以直观地将其放置在列表的左侧。因此,对于初始值为0的
[1;2;3;4;5]
上的左折叠,其结果是:
((((0 + 1) + 2) + 3) + 4) + 5
因此,在本例中,最里面的括号是
(0+.1.0)
,这在OCaml中不起作用,因为0是一个int,语言不会自动将其转换为float。正如Chuck提到的,int和float之间没有自动转换。此外,要成为浮点文字,它必须具有小数点或采用指数表示法
因此,要修复代码,需要在0上添加一个小数点,使其成为浮点常量;您还需要将长度从int转换为float:
let avg l =
List.fold_left ( +. ) 0. l /. float_of_int (List.length l);;