> Seq.scan (fun acc n -> acc + n) 0 [1;2;3;4];;
val it : seq<int> = seq [0; 1; 3; 6; ...]
Со списками:
> [1;2;3;4] |> List.scan (fun acc n -> acc + n) 0 |> List.tail;;
val it : int list = [1; 3; 6; 10]
Редактировать: Другой способ с последовательностями:
let sum s = seq {
let x = ref 0
for i in s do
x := !x + i
yield !x
}
Да, есть изменяемая переменная, но я считаю ее более читаемой (если вы хотите избавиться от ведущего 0).