Skip to content

Commit c54737f

Browse files
committed
chore: update documentation and examples
1 parent 87a1bb8 commit c54737f

File tree

3 files changed

+38
-33
lines changed

3 files changed

+38
-33
lines changed

README.md

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@ You can either create an mathematical expression programmatically or parse a str
4949

5050
* Create the expression programmatically:
5151
```dart
52-
Variable x = Variable('x'), y = Variable('y');
53-
Power xSquare = Power(x, 2);
54-
Cos yCos = Cos(y);
55-
Number three = Number(3.0);
52+
var x = Variable('x'), y = Variable('y');
53+
var xSquare = Power(x, 2);
54+
var yCos = Cos(y);
55+
var three = Number(3.0);
5656
Expression exp = (xSquare + yCos) / three;
5757
```
5858

@@ -67,12 +67,13 @@ You can either create an mathematical expression programmatically or parse a str
6767
* Bind variables and evaluate the expression as real number:
6868
```dart
6969
// Bind variables:
70-
ContextModel cm = ContextModel();
71-
cm.bindVariable(x, Number(2.0));
72-
cm.bindVariable(y, Number(Math.PI));
70+
var context = ContextModel()
71+
..bindVariableName('x', Number(2.0));
72+
..bindVariableName('y', Number(math.pi));
7373
7474
// Evaluate expression:
75-
double eval = exp.evaluate(EvaluationType.REAL, cm);
75+
var evaluator = RealEvaluator(context);
76+
num eval = evaluator.evaluate(exp);
7677
7778
print(eval) // = 1.0
7879
```

bin/interpreter.dart

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import 'dart:io';
55

66
import 'package:math_expressions/math_expressions.dart';
77

8-
ContextModel contextModel = ContextModel();
8+
ContextModel context = ContextModel();
9+
RealEvaluator evaluator = RealEvaluator(context);
910
ExpressionParser parser = GrammarParser();
1011
Expression? currentExpression;
1112

@@ -66,8 +67,8 @@ void parseInput(String input) {
6667

6768
void _evaluate() {
6869
if (currentExpression == null) throw StateError('No Expression set.');
69-
double eval = currentExpression!.evaluate(EvaluationType.REAL, contextModel);
70-
print('> Variables: ${contextModel.variables}');
70+
num eval = evaluator.evaluate(currentExpression!);
71+
print('> Variables: ${context.variables}');
7172
print('> Result: $currentExpression = ${eval.toString()}');
7273
}
7374

@@ -95,12 +96,12 @@ void _setVar(String input) {
9596
String varName = input.split('=')[0].trim();
9697
String expression = input.split('=')[1].trim();
9798
var expr = parser.parse(expression);
98-
contextModel.bindVariableName(varName, expr);
99+
context.bindVariableName(varName, expr);
99100
print('> Bound variable $varName to $expr.');
100101
}
101102

102103
void _getVar(String input) {
103104
String varName = input.substring(1);
104-
var expr = contextModel.getExpression(varName);
105+
var expr = context.getExpression(varName);
105106
print('> $varName is bound to $expr.');
106107
}

example/main.dart

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,24 @@ void _expression_creation_and_evaluation() {
2828
Expression exp = p.parse('(x^2 + cos(y)) / 3');
2929

3030
// (1b) Build expression: (x^2 + cos(y)) / 3
31-
Variable x = Variable('x'), y = Variable('y');
32-
Power xSquare = Power(x, 2);
33-
Cos yCos = Cos(y);
34-
Number three = Number(3.0);
31+
var x = Variable('x'), y = Variable('y');
32+
var xSquare = Power(x, 2);
33+
var yCos = Cos(y);
34+
var three = Number(3.0);
3535
exp = (xSquare + yCos) / three;
3636

3737
// Bind variables and evaluate the expression as real number.
3838
// (2) Bind variables:
39-
ContextModel cm = ContextModel()
39+
var context = ContextModel()
4040
..bindVariable(x, Number(2.0))
4141
..bindVariable(y, Number(math.pi));
4242

4343
// (3) Evaluate expression:
44-
double eval = exp.evaluate(EvaluationType.REAL, cm);
44+
var evaluator = RealEvaluator(context);
45+
num eval = evaluator.evaluate(exp);
4546

4647
print('Expression: $exp');
47-
print('Evaluated expression: $eval\n (with context: $cm)'); // = 1
48+
print('Evaluated expression: $eval\n (with context: $context)'); // = 1
4849
}
4950

5051
/// Example 2: Expression simplification and differentiation
@@ -78,29 +79,30 @@ void _custom_function_definition_and_use() {
7879
print('\nExample 3: Custom function definition and use\n');
7980

8081
// (1) Create and evaluate custom function: DOUBLEUP (R -> R)
81-
ContextModel cm = ContextModel();
82-
Variable x = Variable('x');
82+
var context = ContextModel();
83+
var evaluator = RealEvaluator(context);
84+
var x = Variable('x');
8385
CustomFunction doubleup = CustomFunction('doubleup', [x], x * Number(2));
8486

85-
cm.bindVariable(x, Number(0.5));
87+
context.bindVariable(x, Number(0.5));
8688

8789
print('$doubleup = ${doubleup.expression}');
8890
print(
89-
'doubleup(${cm.getExpression('x')}) = ${doubleup.evaluate(EvaluationType.REAL, cm)}\n');
91+
'doubleup(${context.getExpression('x')}) = ${evaluator.evaluate(doubleup)}\n');
9092

9193
// (1) Create and evaluate custom function: LEFTSHIFT (R² -> R)
9294
// Shifting to the left makes the number larger, effectively multiplying the
9395
// number by pow(2, shiftIndex). Custom implementation of x << i.
94-
Variable shiftIndex = Variable('i');
96+
var shiftIndex = Variable('i');
9597
CustomFunction leftshift =
9698
CustomFunction('leftshift', [x, shiftIndex], x * Power(2, shiftIndex));
9799

98-
cm.bindVariable(x, Number(250));
99-
cm.bindVariable(shiftIndex, Number(8));
100+
context.bindVariable(x, Number(250));
101+
context.bindVariable(shiftIndex, Number(8));
100102

101103
print('$leftshift = ${leftshift.expression}');
102104
print(
103-
'leftshift(${cm.getExpression('x')}, ${cm.getExpression('i')}) = ${leftshift.evaluate(EvaluationType.REAL, cm)}');
105+
'leftshift(${context.getExpression('x')}, ${context.getExpression('i')}) = ${evaluator.evaluate(leftshift)}');
104106
}
105107

106108
/// Example 4: Algorithmic function definition and use
@@ -117,11 +119,12 @@ void _algorithmic_function_definition_and_use() {
117119
print('my_min(1, x, -1) = $exp');
118120

119121
// (1) Evaluate algorithmic function: MY_MIN (R^3 -> R)
120-
ContextModel cm = ContextModel();
121-
Variable x = Variable('x');
122+
var context = ContextModel();
123+
var evaluator = RealEvaluator(context);
124+
var x = Variable('x');
122125

123-
cm.bindVariable(x, -Number(2));
126+
context.bindVariable(x, -Number(2));
124127

125-
double res = exp.evaluate(EvaluationType.REAL, cm);
126-
print('my_min(1, ${cm.getExpression('x')}, -1) = $res');
128+
num res = evaluator.evaluate(exp);
129+
print('my_min(1, ${context.getExpression('x')}, -1) = $res');
127130
}

0 commit comments

Comments
 (0)