ram6ler/function-tree
A simple dart library for parsing strings into callable function-trees.
前往 github 下载Function Tree
Welcome to function_tree
, a simple library for parsing strings into
callable function-trees.
Parsing strings as mathematical expressions
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
Function Trees
The library supports two types of callable, function-trees, namely
SingleVariableFunction
and MultiVariableFunction
.
Single variable functions
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() + "*");
}
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
| *
|*
|*
|*
| *
| *
| *
| *
| *
| *
| *
| *
Multi-variable functions
Similarly, we can construct a MultiVariableFunction
instance or call the
toMultiVariableFunction
string extension to create a multi-variable function
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
TeX expressions
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)
Derivatives
Derivative trees can be constructed through the SingleVariableFunction.derivative
and MultiVariableFunction.partial
methods.
final f = "(2 * x) ^ (1 / (x ^ 2))".toSingleVariableFunction(),
fDash = f.derivative("x");
print("x y y'");
for (var x = 0.5; x < 3.0; x += 0.25) {
print(
"${x.toStringAsFixed(4)} "
"${f(x).toStringAsFixed(4)} "
"${fDash(x).toStringAsFixed(4)}");
}
x y y'
0.5000 1.0000 8.0000
0.7500 2.0561 0.9215
1.0000 2.0000 -0.7726
1.2500 1.7976 -0.7663
1.5000 1.6295 -0.5780
1.7500 1.5054 -0.4229
2.0000 1.4142 -0.3134
2.2500 1.3460 -0.2373
2.5000 1.2937 -0.1837
2.7500 1.2529 -0.1452
final f = "sin(u ^ 2 + 2 * v)".toMultiVariableFunction(["u", "v"]),
fu = f.partial("u"),
fv = f.partial("v"),
pi = "pi".interpret(),
u = pi / 3,
v = pi / 4;
for (final fun in [f, fu, fv]) {
print("${fun({"u": u, "v": v})}");
}
0.4566033934365143
-1.8633212348878314
-1.779340710602958
Interpreter
The interpreter has support for the following:
Functions
One-parameter functions
abs acos asin atan ceil
cos cosh cot coth csc
csch exp fact floor ln
log round sec sech sin
sinh sqrt tan tanh
Two-parameter functions
log nrt pow
Constants
e pi ln2 ln10 log2e
log10e sqrt1_2 sqrt2
Operations
+ - * / % ^
Thanks
Thanks for your interest in this library. Please file any bugs or
requests here.
![](/images/banner-woo.jpg)
与 ram6ler/function-tree 相关优秀项目推荐下载
AppFlowy
47859
AppFlowy is an open-source alternative to Notion. You are in charge of your data and customizations. Built with Flutter and Rust.
localsend
33797
An open-source cross-platform alternative to AirDrop
spotube
23772
🎧 Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile!
revanced-manager
15035
💊 Application to use ReVanced on Android
gsy_github_app_flutter
14559
Flutter 超完整的开源项目,功能丰富,适合学习和日常使用。GSYGithubApp系列的优势:我们目前已经拥有Flutter、Weex、ReactNative、kotlin 四个版本。 功能齐全,项目框架内技术涉及面广,完成度高,持续维护,配套文章,适合全面学习,对比参考。跨平台的开源Github客户端App,更好的体验,更丰富的功能,旨在更好的日常管理和维护个人Github,提供更好更方便的驾车体验Σ( ̄。 ̄ノ)ノ。同款Weex版本 : https://github.com/CarGuo/GSYGithubAppWeex 、同款React Native版本 : https://github.com/CarGuo/GSYGithubApp 、原生 kotlin 版本 https://github.com/CarGuo/GSYGithubAppKotlin
dio
12249
A powerful HTTP client for Dart and Flutter, which supports global settings, Interceptors, FormData, aborting and canceling a request, files uploading and downloading, requests timeout, custom adapters, etc.
gopeed
11832
A modern download manager that supports all platforms. Built with Golang and Flutter.
bloc
11441
A predictable state management library that helps implement the BLoC design pattern
getx
9899
Open screens/snackbars/dialogs/bottomSheets without context, manage states and inject dependencies easily with Get.
flame
8846
A Flutter based game engine.
flutter_deer
7595
🦌 Flutter 练习项目(包括集成测试、可访问性测试)。内含完整UI设计图,更贴近真实项目的练习。Flutter practice project (including integration testing and accessibility testing). Contains complete UI design drawings for a more realistic practice project.
fish-redux
7343
An assembled flutter application framework.
hiddify-next
7232
Multi-platform auto-proxy client, supporting Sing-box, X-ray, TUIC, Hysteria, Reality, Trojan, SSH etc. It’s an open-source, secure and ad-free.
ente
6686
Fully open source, End to End Encrypted alternative to Google Photos and Apple Photos
fl_chart
6451
FL Chart is a highly customizable Flutter chart library that supports Line Chart, Bar Chart, Pie Chart, Scatter Chart, and Radar Chart.
pixez-flutter
6360
一个支持免代理直连及查看动图的第三方Pixiv flutter客户端
Flutter-Responsive-Admin-Panel-or-Dashboard
6355
Responsive Admin Panel or Dashboard using Flutter
aidea
6021
AIdea 是一款支持 GPT 以及国产大语言模型通义千问、文心一言等,支持 Stable Diffusion 文生图、图生图、 SDXL1.0、超分辨率、图片上色的全能型 APP。
riverpod
5828
A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
pikapika
5463
美观易用且无广告的漫画和游戏客户端,同时支持MacOS,Windows,Android,iOS。