2020-06-03 12:41:26 +02:00

52 lines
1.1 KiB
Plaintext

let rec aux_simple =
(i: int): int =>
if(i
< 100) {
aux_simple(i + 1)
} else {
i
};
let counter_simple = (n: int): int => aux_simple(n);
type sum_aggregator = {counter: int, sum: int };
let counter =
(n: int): int =>
{
let initial: sum_aggregator = {counter = 0, sum = 0 };
let rec aggregate =
(prev: sum_aggregator): int =>
if(prev[counter]
<= n) {
aggregate({
counter = prev[counter] + 1,
sum = prev[counter] + prev[sum]
})
} else {
prev[sum]
};
aggregate(initial)
};
let rec aux_nest =
(prev: sum_aggregator): sum_aggregator =>
if(prev[counter]
< 100) {
let sum: int = prev[sum] + aux_simple(prev[counter]);
aux_nest({counter = prev[counter] + 1, sum = sum })
} else {
({counter = prev[counter], sum = prev[sum] })
};
let counter_nest =
(n: int): int =>
{
let initial: sum_aggregator = {counter = 0, sum = 0 };
let out: sum_aggregator = aux_nest(initial);
out[sum]
};