Difference between pages "Template:HideLink" and "Monster eval"
(Difference between pages)
Jump to navigation
Jump to search
imported>StDoodle m |
imported>Bale (Start page. This needs a lot of work. r8824) |
||
Line 1: | Line 1: | ||
− | + | {{ | |
− | + | #vardefine:name|monster_eval}}{{ | |
− | + | #vardefine:return_type|float}}{{ | |
− | + | ||
− | + | FunctionPage| | |
− | < | + | name={{#var:name}}| |
+ | |||
+ | function1={{Function| | ||
+ | name={{#var:name}}| | ||
+ | aggregate={{#var:aggregate}}| | ||
+ | return_type={{#var:return_type}}| | ||
+ | return_also={{#var:return_also}}| | ||
+ | parameter1={{Param|string|expression}}| | ||
+ | p1desc={{pspan|expression}} is a mathematical expression to be solved.| | ||
+ | }}| | ||
+ | |||
+ | function_description= Evaluates an expression... somehow.| | ||
+ | |||
+ | code1={{CodeSample| | ||
+ | title=Code Sample| | ||
+ | description=This script expands modifier_eval() to include support for user-defined variables. It is extremely complex, but it is extremely useful to anyone who wants to use modifier_eval().| | ||
+ | code= | ||
+ | <syntaxhighlight> | ||
+ | float eval(string expr, float[string] vars) { | ||
+ | buffer b; | ||
+ | matcher m = create_matcher( "\\b[a-z_][a-zA-Z0-9_]*\\b", expr ); | ||
+ | while (m.find()) { | ||
+ | string var = m.group(0); | ||
+ | if (vars contains var) { | ||
+ | m.append_replacement(b, vars[var].to_string()); | ||
+ | } | ||
+ | // could implement functions, pref access, etc. here | ||
+ | } | ||
+ | m.append_tail(b); | ||
+ | return modifier_eval(b.to_string()); | ||
+ | } | ||
+ | |||
+ | # Everything below this line shows how to make use of eval(). | ||
+ | # TESTING: | ||
+ | |||
+ | float[string] v; | ||
+ | v["pi"] = 3.14159265; | ||
+ | v["ten"] = 10; | ||
+ | print(eval("2+3", v)); | ||
+ | print(eval("max(pi^ten,ten^pi)", v)); | ||
+ | print(eval("sqrt(pi)*L", v)); | ||
+ | print(eval("undefined/2", v)); | ||
+ | |||
+ | </syntaxhighlight>}}| | ||
+ | }} | ||
+ | |||
+ | [[Category:Math and Numbers]] |
Revision as of 10:36, 16 December 2010
Function Syntax
float monster_eval(string expression )
- expression is a mathematical expression to be solved.
Evaluates an expression... somehow.
Code Sample
This script expands modifier_eval() to include support for user-defined variables. It is extremely complex, but it is extremely useful to anyone who wants to use modifier_eval().
float eval(string expr, float[string] vars) {
buffer b;
matcher m = create_matcher( "\\b[a-z_][a-zA-Z0-9_]*\\b", expr );
while (m.find()) {
string var = m.group(0);
if (vars contains var) {
m.append_replacement(b, vars[var].to_string());
}
// could implement functions, pref access, etc. here
}
m.append_tail(b);
return modifier_eval(b.to_string());
}
# Everything below this line shows how to make use of eval().
# TESTING:
float[string] v;
v["pi"] = 3.14159265;
v["ten"] = 10;
print(eval("2+3", v));
print(eval("max(pi^ten,ten^pi)", v));
print(eval("sqrt(pi)*L", v));
print(eval("undefined/2", v));