Welcome to function_tree
, a simple library for parsing strings
into callable function-trees.
At the simplest (and least efficient) level, we can
interpret
strings as mathematical
expressions.
final expressions = [
'2 + 2',
'(3 + 2)^3',
'3 * pi / 4',
'3 * sin(5 * pi / 6)',
'e^(-1)'
];
for (final expression in expressions) {
print("'$expression' -> ${expression.interpret()}");
}
'2 + 2' -> 4.0
'(3 + 2)^3' -> 125.0
'3 * pi / 4' -> 2.356194490192345
'3 * sin(5 * pi / 6)' -> 1.5000000000000009
'e^(-1)' -> 0.36787944117144233
The library supports two types of callable,
function-trees, namely SingleVariableFunction
and MultiVariableFunction
.
We can create a single variable function from
a string either by constructing a SingleVariableFunction
instance or by calling the toSingleVariableFunction
string extension directly on a string, as in the following
example:
final f = '20 * (sin(x) + 1)'.toSingleVariableFunction(),
pi = 'pi'.interpret();
for (var x = 0.0; x < 2 * pi; x += pi / 20) {
print('|' + ' ' * f(x).round() + '*');
}
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
|*
|*
|*
| *
| *
| *
| *
| *
| *
| *
| *
Similarly, we can construct a MultiVariableFunction
instance or call the toMultiVariableFunction
string extension
to create a multi-variable functional tree, as in
the following example.
final times = 'a * b'.toMultiVariableFunction(['a', 'b']),
values = [1, 2, 3, 4, 5];
for (final a in values) {
final sb = StringBuffer();
for (final b in values) {
sb..write(times({'a': a, 'b': b}).floor())..write('\t');
}
print(sb);
}
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
Function tree instances have a tex
property for
TeX expressions.
final f = 'x * cos(y) + y * sin(x)'.toMultiVariableFunction(['x', 'y']);
print(f.tex);
x \cdot \cos\left( y \right) + y \cdot \sin\left( x \right)
The interpreter has support for the following:
abs acos asin atan ceil
cos cosh cot coth csc
csch exp floor ln log
round sec sech sin sinh
sqrt tan tanh
log nrt pow
e pi ln2 ln10 log2e
log10e sqrt1_2 sqrt2
+ - * / % ^
Thanks for your interest in this library. Please file any bugs or requests here.