Awesome
Rebol/MathPresso
Rebol3 extension for Mathematical Expression Parser And JIT Compiler. Using Petr Kobalicek's MathPresso code.
Usage
This is an example of the initial syntax.
mp: import 'mathpresso
;; initialize a mathpresso context with given number of input/output variable names
ctx: mp/context [x y step amplitude result]
;; compile an expression using the context
expr: mp/compile :ctx "y=sin(x); x=x+step; result=round(y*amplitude)/100"
;; To evaluate the expression, we need to provide a vector containing double values of count
;; eaqual or greater than number of variables used to create the evaluation context (5 in this case)
data: #(double! [0 0 0 10000 0]) ; used in the expression like x, y, step, amplitude and result values
;; initialize the step onput value using Rebol only
data/3: pi / 30
;; Evaluate expression (preferably multiple times)
loop 31 [ probe mp/eval :expr :data ]
;; Values in the data vector are updated...
probe data
;; one context may be shared with multiple expressions
expr2: mp/compile :ctx "y=sin(x)+cos(x/2); x=x+step; result=round(y*amplitude)/100"
loop 31 [ probe mp/eval :expr2 :data ]
Feel free to let me know if something could be improved.
Extension commands:
context
:spec
Initialize MPContext handle with given variable names
spec
[block!]
Block with variable names used by expressions
compile
:context
:expression
Compile math expression using the given context
context
[handle!]
MPContextexpression
[string!]
Math expression
eval
:expression
:variables
Evaluate precompiled math expressions using given variables
expression
[handle!]
MPExpressionvariables
[vector!]
Variables in a double format