arithmetic-eval 0.3.0

Simple interpreter for arithmetic expressions.
Documentation
//! Module defining a right-fold function.

rfold = |xs, acc, fn| {
    (_, acc) = (xs, acc).while(
        |(xs, _)| xs as [_] != (),
        |(xs, acc)| {
            (...head: Num, tail: Num) = xs as any;
            (head, fn(acc, tail))
        },
    );
    acc
};

// Check that `rfold` works with different accumulator types.
folded = (1, 2, 3).rfold(() as [_], push);
assert_eq(folded, (3, 2, 1));

(4, 5, 6).rfold(true, |acc, x| acc && x > 0);

(min, max) = (1, 2, 3, 4).rfold((INF, -INF), |(min, max), x| {
     min = if(x < min, x, min);
     max = if(x > max, x, max);
     (min, max)
});

// Export the `rfold` function.
rfold