为 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]