为 OCaml 列表中的每个元素添加前一个元素
Add the previous element for each element in a list in OCaml
我想做这样的事情:
如果我有以下列表:
[1;2;3;4;5]
我想获得这个:
[1;3;6;10;15] -> result of doing [0+1=1; 1+2=3; 3+3=6; 6+4=10; 10+5=15]
我有下面的代码,但它不是尾递归的
let sumsum l = List.fold_right (fun x t -> x::List.map ((+) x) t) l [];;
我卡住了尾递归,有人可以帮我吗?
不使用 List.fold_right、List.fold_left 和 List.map 也可以吗?
谢谢
let sumsum l =
let rec aux a' acc = function
| [] -> List.rev acc
| a::tl -> let b=a+a' in aux b (b::acc) tl
in
aux 0 [] l
;;
测试
# sumsum [1;2;3;4;5];;
- : int list = [1; 3; 6; 10; 15]
我想做这样的事情:
如果我有以下列表:
[1;2;3;4;5]
我想获得这个:
[1;3;6;10;15] -> result of doing [0+1=1; 1+2=3; 3+3=6; 6+4=10; 10+5=15]
我有下面的代码,但它不是尾递归的
let sumsum l = List.fold_right (fun x t -> x::List.map ((+) x) t) l [];;
我卡住了尾递归,有人可以帮我吗?
不使用 List.fold_right、List.fold_left 和 List.map 也可以吗?
谢谢
let sumsum l =
let rec aux a' acc = function
| [] -> List.rev acc
| a::tl -> let b=a+a' in aux b (b::acc) tl
in
aux 0 [] l
;;
测试
# sumsum [1;2;3;4;5];;
- : int list = [1; 3; 6; 10; 15]