2020-06-03 12:41:26 +02:00
|
|
|
let rec aux_simple =
|
2020-06-04 21:36:12 +02:00
|
|
|
(i: int): int =>
|
2020-06-05 13:56:14 +02:00
|
|
|
if(i < 100) {
|
2020-06-03 12:41:26 +02:00
|
|
|
aux_simple(i + 1)
|
|
|
|
} else {
|
|
|
|
i
|
|
|
|
};
|
|
|
|
|
2020-06-04 21:36:12 +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-05 13:56:14 +02:00
|
|
|
(n: int): int => {
|
2020-06-05 16:01:18 +02:00
|
|
|
let initial: sum_aggregator = {
|
|
|
|
counter: 0,
|
|
|
|
sum: 0
|
|
|
|
};
|
2020-06-05 13:56:14 +02:00
|
|
|
let rec aggregate =
|
|
|
|
(prev: sum_aggregator): int =>
|
|
|
|
if(prev.counter <= n) {
|
|
|
|
|
2020-06-03 12:41:26 +02:00
|
|
|
|
2020-06-05 13:56:14 +02:00
|
|
|
aggregate({
|
|
|
|
counter: prev.counter + 1,
|
|
|
|
sum: prev.counter + prev.sum
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
prev.sum
|
|
|
|
};
|
|
|
|
aggregate(initial)
|
|
|
|
};
|
2020-06-03 12:41:26 +02:00
|
|
|
|
|
|
|
let rec aux_nest =
|
2020-06-04 21:36:12 +02:00
|
|
|
(prev: sum_aggregator): sum_aggregator =>
|
2020-06-05 13:56:14 +02:00
|
|
|
if(prev.counter < 100) {
|
2020-06-03 12:41:26 +02:00
|
|
|
|
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-05 13:56:14 +02:00
|
|
|
(n: int): int => {
|
2020-06-05 16:01:18 +02:00
|
|
|
let initial: sum_aggregator = {
|
|
|
|
counter: 0,
|
|
|
|
sum: 0
|
|
|
|
};
|
2020-06-05 13:56:14 +02:00
|
|
|
let out: sum_aggregator = aux_nest(initial);
|
|
|
|
out.sum
|
|
|
|
};
|