class Keisan::Function

Attributes

arity[R]
name[R]

Public Class Methods

new(name, arity = 1) click to toggle source
# File lib/keisan/function.rb, line 5
def initialize(name, arity = 1)
  @name = name
  @arity = arity
end

Public Instance Methods

differentiate(ast_function, variable, context = nil) click to toggle source
# File lib/keisan/function.rb, line 22
def differentiate(ast_function, variable, context = nil)
  raise Exceptions::NotImplementedError.new
end
evaluate(ast_function, context = nil) click to toggle source
# File lib/keisan/function.rb, line 14
def evaluate(ast_function, context = nil)
  raise Exceptions::NotImplementedError.new
end
simplify(ast_function, context = nil) click to toggle source
# File lib/keisan/function.rb, line 18
def simplify(ast_function, context = nil)
  raise Exceptions::NotImplementedError.new
end
unbound_variables(children, context) click to toggle source
# File lib/keisan/function.rb, line 26
def unbound_variables(children, context)
  children.inject(Set.new) do |vars, child|
    vars | child.unbound_variables(context)
  end
end
value(ast_function, context = nil) click to toggle source
# File lib/keisan/function.rb, line 10
def value(ast_function, context = nil)
  raise Exceptions::NotImplementedError.new
end

Protected Instance Methods

validate_arguments!(count) click to toggle source
# File lib/keisan/function.rb, line 34
def validate_arguments!(count)
  case arity
  when Integer
    if arity < 0 && count < arity.abs || arity >= 0 && count != arity
      raise Keisan::Exceptions::InvalidFunctionError.new("Require #{arity} arguments to #{name}")
    end
  when Range
    unless arity.include? count
      raise Keisan::Exceptions::InvalidFunctionError.new("Require #{arity} arguments to #{name}")
    end
  else
    raise Keisan::Exceptions::InternalError.new("Invalid arity: #{arity}")
  end
end