Difference between pages "Template:HideLink" and "Monster eval"

From Kolmafia
(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:
<includeonly>
+
{{
<span style="display:none;">==={{{1}}}===</span>
+
#vardefine:name|monster_eval}}{{
</includeonly>
+
#vardefine:return_type|float}}{{
<noinclude>
+
 
Supply a single parameter of the hidden anchor (link reference).
+
FunctionPage|
<noinclude>
+
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));