#list #recursion #functional-programming #ocaml #tail-recursion
#Список #рекурсия #функциональное программирование #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
🙂
Ответ №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]