我想做这样的事情:
如果我有以下列表:
[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来实现吗?
由于
答案 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]