ligo/src/test/contracts/loop.religo
2020-03-12 16:05:17 +01:00

40 lines
1.0 KiB
Plaintext

/* Test loops in ReasonLIGO */
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;
};