我一直在试图绕到我的头fold_left和fold_right.作为练习,我一直在尝试重写很多功能fold_left并fold_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;;
Run Code Online (Sandbox Code Playgroud)
然后我会继续寻找平均值.这是我的问题.是否可以将这两个值合二为一fold_left?我该如何编写匿名函数?谢谢!
你只需要使用一对作为累加器:
# 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |