class Keisan::AST::Variable
Attributes
name[R]
Public Class Methods
new(name)
click to toggle source
# File lib/keisan/ast/variable.rb, line 6 def initialize(name) @name = name end
Public Instance Methods
==(other)
click to toggle source
# File lib/keisan/ast/variable.rb, line 30 def ==(other) case other when Variable name == other.name else false end end
differentiate(variable, context = nil)
click to toggle source
# File lib/keisan/ast/variable.rb, line 73 def differentiate(variable, context = nil) context ||= Context.new if name == variable.name && !context.has_variable?(name) 1.to_node else 0.to_node end end
evaluate(context = nil)
click to toggle source
# File lib/keisan/ast/variable.rb, line 43 def evaluate(context = nil) context ||= Context.new if context.has_variable?(name) variable = variable_node_from_context(context) # The variable might just be a variable, i.e. probably in function definition if variable.is_a?(Node) variable.is_a?(Variable) ? variable : variable.evaluate(context) else variable end else self end end
replace(variable, replacement)
click to toggle source
# File lib/keisan/ast/variable.rb, line 68 def replace(variable, replacement) to_replace_name = variable.is_a?(::String) ? variable : variable.name name == to_replace_name ? replacement : self end
simplify(context = nil)
click to toggle source
# File lib/keisan/ast/variable.rb, line 59 def simplify(context = nil) context ||= Context.new if context.has_variable?(name) context.variable(name).to_node.simplify(context) else self end end
to_s()
click to toggle source
# File lib/keisan/ast/variable.rb, line 39 def to_s name.to_s end
unbound_variables(context = nil)
click to toggle source
# File lib/keisan/ast/variable.rb, line 25 def unbound_variables(context = nil) context ||= Context.new context.has_variable?(name) ? Set.new : Set.new([name]) end
value(context = nil)
click to toggle source
# File lib/keisan/ast/variable.rb, line 14 def value(context = nil) context ||= Context.new node = variable_node_from_context(context) case node when Variable node else node.value(context) end end
variable_truthy?(context)
click to toggle source
# File lib/keisan/ast/variable.rb, line 10 def variable_truthy?(context) context.has_variable?(name) && context.variable(name).true? end
Private Instance Methods
variable_node_from_context(context)
click to toggle source
# File lib/keisan/ast/variable.rb, line 85 def variable_node_from_context(context) variable = context.variable(name) variable = variable.node if variable.is_a?(Cell) variable end