使用foldl获取列表的平均值

问题描述 投票:0回答:1

我正在尝试使用以下帮助函数来获取列表的平均值:

let rec foldl f l b = match l with
  | [] -> b
  | x :: l -> foldl f l (f x b);;

let avg l = foldl (fun x acc -> let x = (a,b) in avv = (a +. acc) /. (b + 1)) l 0;;

但是它不断地给我一个又一个的错误

需要它的更正版本

list recursion functional-programming ocaml folding
1个回答
0
投票

实现正确平均值的一种简单方法是用

sum
len
(gth) 来实现,这两者都可以直接用
foldl
来写:

let sum l = foldl (+.) l 0.0;;
let len l = foldl (fun _ n -> n + 1) l 0;;
let avg l = sum l /. float_of_int (len l)

(我们也可以使用

len l
+.
1.0
使
0.0
返回浮点数,而不是使用
float_of_int
进行转换,但这没有多大意义)

© www.soinside.com 2019 - 2024. All rights reserved.