class Keisan::Functions::Replace
Public Class Methods
new()
click to toggle source
# File lib/keisan/functions/replace.rb, line 4 def initialize @name = "replace" end
Public Instance Methods
evaluate(ast_function, context = nil)
click to toggle source
# File lib/keisan/functions/replace.rb, line 23 def evaluate(ast_function, context = nil) context ||= Context.new simplify(ast_function, context).evaluate(context) end
simplify(ast_function, context = nil)
click to toggle source
# File lib/keisan/functions/replace.rb, line 13 def simplify(ast_function, context = nil) context ||= Context.new expression, variable, replacement = expression_variable_replacement(ast_function) expression = expression.simplify(context) replacement = replacement.simplify(context) expression.replace(variable, replacement).simplify(context) end
value(ast_function, context = nil)
click to toggle source
# File lib/keisan/functions/replace.rb, line 8 def value(ast_function, context = nil) context ||= Context.new evaluate(ast_function, context).value(context) end
Private Instance Methods
expression_variable_replacement(ast_function)
click to toggle source
# File lib/keisan/functions/replace.rb, line 30 def expression_variable_replacement(ast_function) unless ast_function.is_a?(AST::Function) && ast_function.name == name raise Exceptions::InvalidFunctionError.new("Must receive replace function") end unless ast_function.children.size == 3 raise Exceptions::InvalidFunctionError.new("Require 3 arguments to replace") end expression, variable, replacement = *ast_function.children.map(&:deep_dup) unless variable.is_a?(AST::Variable) raise Exceptions::InvalidFunctionError.new("Replace must replace a variable") end [expression, variable, replacement] end