Ocaml 使用单折叠左键查找列表的长度和和总和

Ocaml 使用单折叠左键查找列表的长度和和总和,ocaml,Ocaml,我一直在试着把头绕着左折和右折。作为练习,我一直在尝试重写fold\u left和fold\u right中的许多函数,以增强我的知识。例如,在查找列表的平均值时,我会使用折叠计算列表的总和和长度 let sum_l xs = List.fold_left (fun x y -> x + y) 0 xs;; let len_l xs = List.fold_left (fun x _ -> x + 1) 0 xs;; 然后我会继续寻找平均值。这是我的问题。是否可以将这两个值同时向左

我一直在试着把头绕着
左折
右折
。作为练习,我一直在尝试重写
fold\u left
fold\u right
中的许多函数,以增强我的知识。例如,在查找列表的平均值时,我会使用折叠计算列表的总和和长度

let sum_l xs = List.fold_left (fun x y -> x + y) 0 xs;;
let len_l xs = List.fold_left (fun x _ -> x + 1) 0 xs;;

然后我会继续寻找平均值。这是我的问题。是否可以将这两个值同时向左折叠?我应该如何编写匿名函数?谢谢

您只需使用一对作为累加器:

# let sum_and_len xs = List.fold_left (fun (s,l) x -> s+x, l+1) (0,0) xs;;
val sum_and_len : int list -> int * int = <fun>
# sum_and_len [0;1;2;3];;
- : int * int = (6, 4)
#让sum_和_len xs=List.fold_left(fun(s,l)x->s+x,l+1)(0,0)xs;;
val sum_和_len:int list->int*int=
#和[0;1;2;3];;
-:int*int=(6,4)