Wiki

Clone wiki

function-tree / Home

function-tree

Home | Single variable functions | Multi-variable functions | About

Home

Welcome to function-tree, a Dart library for for parsing strings into callable function-trees.

Using function-tree

Add function_tree to your pubspec.yaml dependencies as described at the library's pub page.

Example session

We can interpret strings as mathematical expressions.

print('2+2'.interpret());
4

We can use functions and constants we are familiar with.

print('e^sin(pi / 3)'.interpret()); 
2.3774426752361646

We can parse strings to define single variable functions.

final f = SingleVariableFunction(fromExpression: 'abs(x^2 - 6 * x +1)');
for (var x = -4.0; x < 6.0; x += 0.5) {
  print('|' + ' ' * f(x).round() + '*');
}
|                                         *
|                                  *
|                            *
|                      *
|                 *
|            *
|        *
|    *
| *
|  *
|    *
|      *
|       *
|        *
|        *
|        *
|       *
|      *
|    *
|  *

(We can also simply call toSingleVariableFunction directly from a string.)

final f = 'atan(exp(x))'.toSingleVariableFunction();
print(f(3));
1.5210503339560446

We can also create multi-variable functions.

final f = MultiVariableFunction(
  fromExpression: 'x * y',
  withVariables: ['x', 'y']
);

final values = [1, 2, 3, 4, 5];
for (final y in values) {
  final sb = StringBuffer();
  for (final x in values) {
    sb..write(f({'x': x, 'y': y}))
      ..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  

(As with single variable functions, we can create multi-variable functions directly from a string.)

final f = 'exp(atan(x)) + atan(exp(y))'.toMultiVariableFunction(['x', 'y']);
print(f({'x': 2, 'y': 3}));
4.546769238959674

Syntax

The string expressions used to build the function-trees are similar to expressions that can be used in Dart after importing dart:math, such as 3 * sin(x) + 1. There are several additions, however, including:

  • the ^ operator, to raise to a power
  • the trigonometric functions, sec, csc and cot, and the hyperbolic functions, sinh, cosh and tanh, are defined.

Updated