Class: Keisan::Calculator

Inherits:
Object
  • Object
show all
Defined in:
lib/keisan/calculator.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(context: nil, allow_recursive: false, allow_blocks: true, allow_multiline: true, allow_random: true) ⇒ Calculator

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



7
8
9
10
11
12
13
14
# File 'lib/keisan/calculator.rb', line 7

def initialize(context: nil, allow_recursive: false, allow_blocks: true, allow_multiline: true, allow_random: true)
  @context = context || Context.new(
    allow_recursive: allow_recursive,
    allow_blocks: allow_blocks,
    allow_multiline: allow_multiline,
    allow_random: allow_random
  )
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



3
4
5
# File 'lib/keisan/calculator.rb', line 3

def context
  @context
end

Instance Method Details

#allow_blocksObject



24
25
26
# File 'lib/keisan/calculator.rb', line 24

def allow_blocks
  context.allow_blocks
end

#allow_multilineObject



28
29
30
# File 'lib/keisan/calculator.rb', line 28

def allow_multiline
  context.allow_multiline
end

#allow_randomObject



32
33
34
# File 'lib/keisan/calculator.rb', line 32

def allow_random
  context.allow_random
end

#allow_recursiveObject



16
17
18
# File 'lib/keisan/calculator.rb', line 16

def allow_recursive
  context.allow_recursive
end

#allow_recursive!Object



20
21
22
# File 'lib/keisan/calculator.rb', line 20

def allow_recursive!
  context.allow_recursive!
end

#ast(expression) ⇒ Object



44
45
46
# File 'lib/keisan/calculator.rb', line 44

def ast(expression)
  Evaluator.new(self).parse_ast(expression)
end

#define_function!(name, function) ⇒ Object



52
53
54
# File 'lib/keisan/calculator.rb', line 52

def define_function!(name, function)
  context.register_function!(name, function)
end

#define_variable!(name, value) ⇒ Object



48
49
50
# File 'lib/keisan/calculator.rb', line 48

def define_variable!(name, value)
  context.register_variable!(name, value)
end

#evaluate(expression, definitions = {}) ⇒ Object



36
37
38
# File 'lib/keisan/calculator.rb', line 36

def evaluate(expression, definitions = {})
  Evaluator.new(self).evaluate(expression, definitions)
end

#simplify(expression, definitions = {}) ⇒ Object



40
41
42
# File 'lib/keisan/calculator.rb', line 40

def simplify(expression, definitions = {})
  Evaluator.new(self).simplify(expression, definitions)
end