0

Я хочу сделать что-то вроде этого:Добавить предыдущий элемент для каждого элемента в списке в 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?

Благодаря

+1

Вы ищете 'scan' :-) – Bergi

ответ

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] 
+0

Спасибо В. Майкл! Оно работает!! – gmv92

+0

Хорошо, gmv92, хорошо провести день. –