Nic*_*ner 3 floating-point ocaml list
我试图找到一个浮动列表的平均值.
let avg l =
List.fold_left ( +. ) 0 l /. List.length l;;
Run Code Online (Sandbox Code Playgroud)
List.fold_left如何工作?(将第一个参数应用于列表(第三个arg)...但是第二个参数是什么?)
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
Run Code Online (Sandbox Code Playgroud)
迭代OCaml中的列表的首选方法是什么?
第二个参数是累加器的初始值.对于左侧折叠,您可以直观地将其放置在列表的左侧.因此,对于[1;2;3;4;5]具有初始值0 的左折叠,它适用于:
((((0 + 1) + 2) + 3) + 4) + 5
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下,最里面的括号可以使用(0 +. 1.0),这在OCaml中不起作用,因为0是一个int,语言不会自动将它转换为浮点数.
正如Chuck所说,整数和浮点数之间没有自动转换.此外,要成为浮点字面值,它必须具有小数点或指数表示法.
因此,要修复代码,需要在0处添加小数点,使其成为浮点常量; 你还需要将长度从int转换为float:
let avg l =
List.fold_left ( +. ) 0. l /. float_of_int (List.length l);;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6693 次 |
| 最近记录: |