class Keisan::Calculator

Attributes

context[R]

Public Class Methods

new(context: nil, allow_recursive: false, allow_blocks: true, allow_multiline: true, allow_random: true, cache: nil) click to toggle source

Note, allow_recursive would be more appropriately named: allow_unbound_functions_in_function_definitions, but it is too late for that.

# File lib/keisan/calculator.rb, line 7
def initialize(context: nil, allow_recursive: false, allow_blocks: true, allow_multiline: true, allow_random: true, cache: nil)
  @context = context || Context.new(
    allow_recursive: allow_recursive,
    allow_blocks: allow_blocks,
    allow_multiline: allow_multiline,
    allow_random: allow_random
  )
  @cache = case cache
           when nil, false
             nil
           when true
             AST::Cache.new
           when AST::Cache
             cache
           else
             raise Exceptions::StandardError.new("cache must be either nil, false, true, or an instance of Keisan::AST::Cache")
           end
end

Public Instance Methods

allow_blocks() click to toggle source
# File lib/keisan/calculator.rb, line 34
def allow_blocks
  context.allow_blocks
end
allow_multiline() click to toggle source
# File lib/keisan/calculator.rb, line 38
def allow_multiline
  context.allow_multiline
end
allow_random() click to toggle source
# File lib/keisan/calculator.rb, line 42
def allow_random
  context.allow_random
end
allow_recursive() click to toggle source
# File lib/keisan/calculator.rb, line 26
def allow_recursive
  context.allow_recursive
end
allow_recursive!() click to toggle source
# File lib/keisan/calculator.rb, line 30
def allow_recursive!
  context.allow_recursive!
end
ast(expression) click to toggle source
# File lib/keisan/calculator.rb, line 54
def ast(expression)
  Evaluator.new(self, cache: @cache).parse_ast(expression)
end
define_function!(name, function) click to toggle source
# File lib/keisan/calculator.rb, line 62
def define_function!(name, function)
  context.register_function!(name, function)
end
define_variable!(name, value) click to toggle source
# File lib/keisan/calculator.rb, line 58
def define_variable!(name, value)
  context.register_variable!(name, value)
end
evaluate(expression, definitions = {}) click to toggle source
# File lib/keisan/calculator.rb, line 46
def evaluate(expression, definitions = {})
  Evaluator.new(self, cache: @cache).evaluate(expression, definitions)
end
simplify(expression, definitions = {}) click to toggle source
# File lib/keisan/calculator.rb, line 50
def simplify(expression, definitions = {})
  Evaluator.new(self, cache: @cache).simplify(expression, definitions)
end