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