Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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:List.fold\u是如何工作的?_List_Floating Point_Ocaml - Fatal编程技术网

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);;