47 lines
1.1 KiB
Plaintext
47 lines
1.1 KiB
Plaintext
/* Test loops in ReasonLIGO */
|
|
|
|
let aux_simple = (i: int): (bool, int) =>
|
|
if (i < 100) {
|
|
continue(i + 1);
|
|
} else {
|
|
stop(i);
|
|
};
|
|
|
|
let counter_simple = (n: int): int => Loop.fold_while(aux_simple, n);
|
|
|
|
type sum_aggregator = {
|
|
counter: int,
|
|
sum: int,
|
|
};
|
|
|
|
let counter = (n: int): int => {
|
|
let initial: sum_aggregator = {counter: 0, sum: 0};
|
|
let out: sum_aggregator =
|
|
Loop.fold_while(
|
|
(prev: sum_aggregator) =>
|
|
if (prev.counter <= n) {
|
|
continue({counter: prev.counter + 1, sum: prev.counter + prev.sum});
|
|
} else {
|
|
stop({counter: prev.counter, sum: prev.sum});
|
|
},
|
|
initial
|
|
);
|
|
out.sum;
|
|
};
|
|
|
|
let aux_nest = (prev: sum_aggregator): (bool, sum_aggregator) =>
|
|
if (prev.counter < 100) {
|
|
continue({
|
|
counter: prev.counter + 1,
|
|
sum: prev.sum + Loop.fold_while(aux_simple, prev.counter),
|
|
});
|
|
} else {
|
|
stop({counter: prev.counter, sum: prev.sum});
|
|
};
|
|
|
|
let counter_nest = (n: int): int => {
|
|
let initial: sum_aggregator = {counter: 0, sum: 0};
|
|
let out: sum_aggregator = Loop.fold_while(aux_nest, initial);
|
|
out.sum;
|
|
};
|