为OCaml中的列表中的每个元素添加上一个元素

时间:2016-10-23 20:02:30

标签: list recursion functional-programming ocaml tail-recursion

我想做这样的事情:

如果我有以下列表:

[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来实现吗?

由于

1 个答案:

答案 0 :(得分:1)

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]