Exmex is an extendable mathematical expression evaluator.
# use Error;
#
For floats, we have a list of predifined operators, namely
^, *, /, +, -, sin, cos, tan, exp, log, and log2. These are
defined in make_default_operators.
Variables
For variables we can use curly brackets as shown in the following expression.
Variables' values are passed as slices to eval.
# use Error;
#
The n-th number in the slice corresponds to the n-th variable. Thereby only the
first occurence of the variables is relevant. In this example, we have x=2.5 and y=3.7.
Extendability
Library users can also define a different set of operators as shown in the following.
# use Error;
#
Operators
Operators are instances of the struct
Operator that has its representation in the field
repr, a binary and a unary operator of
type Option<BinOp<T>> and
Option<fn(T) -> T>, respectively, as
members. BinOp
contains in addition to the operator op of type fn(T, T) -> T an
integer prio. Operators
can be both, binary and unary such as - as defined in the list of default
operators. Note that we expect a unary operator to be always on the left of a
number.
Data Types of Numbers
You can use any type that implements Copy and
FromStr. In case you do not pass a number that matches the
regex r"\.?[0-9]+(\.[0-9]+)?", you have to pass a suitable regex and use the
function parse_with_number_pattern instead of
parse. Here is an example for bool.
# use Error;
#
Priorities and Parentheses
In Exmex-land, unary operators always have higher priority than binary operators, e.g.,
-2^2=4 instead of -2^2=-4. Moreover, we are not too strict regarding parentheses.
For instance "---1" will evalute to -1.
If you want to be on the safe side, we suggest using parentheses.