NAME
Language::FormulaEngine::Formula
VERSION
version 0.08
SYNOPSIS
$formula= $engine->parse($text_expression);
$value= $formula->evaluate(x => 1);
$formula2= $formula->simplify(y => 2);
$coderef= $formula2->compile;
DESCRIPTION
This is a convenient way to carry around the details of a parsed formula and later evaluate it, simplify it, or compile it. It's simply a wrapper around the engine that created it + the parse tree.
ATTRIBUTES
engine
Reference to a Language::FormulaEngine instance.
orig_text
Original string of text that was parsed into this formula. This may be undef
if the formula was generated. In that case, see "deparse" or "to_string".
parse_tree
Reference to the output of "parse" in Language::FormulaEngine::Parser
functions
A set of { $name => 1 } for each named function used in this formula.
symbols
A set of { $name => 1 } for each named variable used in this formula.
CONSTRUCTOR
Standard Moo constructor accepts any of the attributes above.
METHODS
evaluate
$raw_value= $formula->evaluate;
$raw_value= $formula->evaluate(\%alt_vars);
$raw_value= $formula->evaluate($alt_namespace);
Evaluate the formula, optionally specifying variables or a different namespace in which to evaluate it.
simplify
$formula2= $formula1->simplify;
$formula2= $formula1->simplify(\%alt_vars);
$formula2= $formula1->simplify($alt_namespace);
Simplify the formula by substituting known variable values and evaluating pure functions. You can optionally specify variables or a different namespace which should be used.
compile
my $sub= $formula->compile;
my $sub= $formula->compile($subname);
Return an optimized perl coderef for the formula. The signature of the coderef depends on the settings of the $formula->engine->compiler
. Throws an exception if the compile fails.
deparse
Re-stringify the formula, using $self->engine->parser
.
to_string
Return either orig_text
, or deparse
. This is used when stringifying the object.
AUTHOR
Michael Conrad <mconrad@intellitree.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2023 by Michael Conrad, IntelliTree Solutions llc.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.