Method: Keisan::Functions::ProcFunction#evaluate

Defined in:
lib/keisan/functions/proc_function.rb

#evaluate(ast_function, context = nil) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/keisan/functions/proc_function.rb', line 25

def evaluate(ast_function, context = nil)
  validate_arguments!(ast_function.children.count)
  context ||= Context.new

  ast_function.instance_variable_set(
    :@children,
    ast_function.children.map {|child| child.evaluate(context).to_node}
  )

  if ast_function.children.all? {|child| child.well_defined?(context)}
    value(ast_function, context).to_node.evaluate(context)
  else
    ast_function
  end
end