52 lines
1.1 KiB
Plaintext
Raw Normal View History

2020-06-03 12:41:26 +02:00
let rec aux_simple =
2020-06-04 09:54:25 +02:00
((i: int)): int =>
2020-06-03 12:41:26 +02:00
if(i
< 100) {
aux_simple(i + 1)
} else {
i
};
2020-06-04 09:54:25 +02:00
let counter_simple = ((n: int)): int => aux_simple(n);
2020-06-03 12:41:26 +02:00
type sum_aggregator = {counter: int, sum: int };
let counter =
2020-06-04 09:54:25 +02:00
((n: int)): int =>
2020-06-03 12:41:26 +02:00
{
2020-06-04 09:54:25 +02:00
let initial: sum_aggregator = {counter: 0, sum: 0 };
2020-06-03 12:41:26 +02:00
let rec aggregate =
2020-06-04 09:54:25 +02:00
((prev: sum_aggregator)): int =>
if(prev.counter
2020-06-03 12:41:26 +02:00
<= n) {
aggregate({
2020-06-04 09:54:25 +02:00
counter: prev.counter + 1,
sum: prev.counter + prev.sum
2020-06-03 12:41:26 +02:00
})
} else {
2020-06-04 09:54:25 +02:00
prev.sum
2020-06-03 12:41:26 +02:00
};
aggregate(initial)
};
let rec aux_nest =
2020-06-04 09:54:25 +02:00
((prev: sum_aggregator)): sum_aggregator =>
if(prev.counter
2020-06-03 12:41:26 +02:00
< 100) {
2020-06-04 09:54:25 +02:00
let sum: int = prev.sum + aux_simple(prev.counter);
aux_nest({counter: prev.counter + 1, sum: sum })
2020-06-03 12:41:26 +02:00
} else {
2020-06-04 09:54:25 +02:00
({counter: prev.counter, sum: prev.sum })
2020-06-03 12:41:26 +02:00
};
let counter_nest =
2020-06-04 09:54:25 +02:00
((n: int)): int =>
2020-06-03 12:41:26 +02:00
{
2020-06-04 09:54:25 +02:00
let initial: sum_aggregator = {counter: 0, sum: 0 };
2020-06-03 12:41:26 +02:00
let out: sum_aggregator = aux_nest(initial);
2020-06-04 09:54:25 +02:00
out.sum
2020-06-03 12:41:26 +02:00
};