[index]
(Class of Evaluation of Algebraic Expression)
none.
Algebra::AlgebraicParser.eval(string, ring)none.
The value of variable is obtained by the class method indeterminate of ring. The value of numeral is the return value of the class method indeterminate of ring.ground.
require "algebraic-parser"
class A
def self.indeterminate(str)
case str
when "x"; 7
when "y"; 11
end
end
def A.ground
Integer
end
end
p Algebra::AlgebraicParser.eval("x * y - x^2 + x/8", A)
#=> 7*11 - 7**2 + 7/8 = 28
indeterminate of Integer is defined as following:
def Integer.indeterminate(x) eval(x) end
in algebra-supplement.rb which is required by algebraic-parser.rb
Identifier is "a alphabet + some digits". For example,
"a13bc04def0"
is interpreted as
"a13 * b * c04 * d * e * f0".
The order of strength of operations:
; intermediate evaluation +, - sum, difference +, - unary +, unary - *, / product, quotient (juxtaposition) product **, ^ power
In Algebra::Polynomial and Algebra::MPolynomial, indeterminate andground are defined suitably. So we can obtain the value of strings as following:
require "algebraic-parser"
require "rational"
require "m-polynomial"
F = Algebra::MPolynomial(Rational)
p Algebra::AlgebraicParser.eval("- (2*y)**3 + x", F) #=> -8y^3 + x
In Algebra::MPolynomial, indeterminate resists the objects representing variables in order that they appear. So we may set the order, using `;'.
F.variables.clear
p Algebra::AlgebraicParser.eval("x; y; - (2*y)**3 + x", F) #=> x - 8y^3