ligo/src/test/contracts/loop.religo

40 lines
1.0 KiB
Plaintext
Raw Normal View History

2019-12-10 13:47:31 +00:00
/* Test loops in ReasonLIGO */
let rec aux_simple = (i : int) : int =>
if (i < 100) { aux_simple (i + 1); } else { i; };
2019-12-10 13:47:31 +00:00
let counter_simple = (n : int) : int => aux_simple (n);
2019-12-10 13:47:31 +00:00
type sum_aggregator = {
2020-03-02 18:01:56 +01:00
counter : int,
sum : int,
2019-12-10 13:47:31 +00:00
};
2020-03-02 18:01:56 +01:00
let counter = (n : int) : int => {
let initial : sum_aggregator = {counter: 0, sum: 0};
let rec aggregate = (prev : sum_aggregator):int =>
2020-03-02 18:01:56 +01:00
if (prev.counter <= n) {
aggregate ({counter : prev.counter + 1,
2020-03-02 18:01:56 +01:00
sum : prev.counter + prev.sum});
} else {
prev.sum;
2020-03-02 18:01:56 +01:00
};
aggregate (initial);
2019-12-10 13:47:31 +00:00
};
let rec aux_nest = (prev : sum_aggregator) : sum_aggregator =>
2019-12-10 13:47:31 +00:00
if (prev.counter < 100) {
2020-03-02 18:01:56 +01:00
let sum : int =
prev.sum + aux_simple (prev.counter);
aux_nest ({counter: prev.counter + 1,
2020-03-02 18:01:56 +01:00
sum: sum});
2019-12-10 13:47:31 +00:00
} else {
({counter: prev.counter, sum: prev.sum});
2019-12-10 13:47:31 +00:00
};
2020-03-02 18:01:56 +01:00
let counter_nest = (n : int) : int => {
let initial : sum_aggregator = {counter: 0, sum: 0};
let out : sum_aggregator = aux_nest (initial);
2019-12-10 13:47:31 +00:00
out.sum;
};