def total_price
200 + volume * distance
end
sum
product
Slide 9
Slide 9 text
def total_price
200 + volume * distance
end
sum
product
variable
Slide 10
Slide 10 text
def total_price
200 + volume * distance
end
sum
product
constant
variable
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
class Sum
def initialize(left, right)
@left = left
@right = right
end
end
Slide 13
Slide 13 text
class Sum
def initialize(left, right)
@left = left
@right = right
end
end
class Product
def initialize(left, right)
@left = left
@right = right
end
end
Slide 14
Slide 14 text
class Sum
def initialize(left, right)
@left = left
@right = right
end
end
class Product
def initialize(left, right)
@left = left
@right = right
end
end
class Constant
def initialize(value)
@value = value
end
end
Slide 15
Slide 15 text
class Sum
def initialize(left, right)
@left = left
@right = right
end
end
class Product
def initialize(left, right)
@left = left
@right = right
end
end
class Constant
def initialize(value)
@value = value
end
end
class Variable
def initialize(name)
@name = name
end
end
Slide 16
Slide 16 text
def price_formula
Sum.new(
Constant.new(200),
Product.new(
Variable.new(Fvolume),
Variable.new(Fdistance),
)
)
end
class Variable < AbstractExpr
def initialize(name)
@name = name
end
def evaluate(input)
Node.new(
"var #{@name}",
input.fetch(@name),
[],
)
end
end
Slide 35
Slide 35 text
class Constant
def initialize(value)
@value = value
end
def evaluate(_input)
Node.new(
'const',
@value,
[],
)
end
end
Slide 36
Slide 36 text
class Sum
def initialize(left, right)
@left = left
@right = right
end
def evaluate(input)
left_node = @left.evaluate(input)
right_node = @right.evaluate(input)
Node.new(
'+',
left_node.value + right_node.value,
[left_node, right_node],
)
end
end
Slide 37
Slide 37 text
class Product
def initialize(left, right)
@left = left
@right = right
end
def evaluate(input)
left_node = @left.evaluate(input)
right_node = @right.evaluate(input)
Node.new(
'*',
left_node.value * right_node.value,
[left_node, right_node],
)
end
end
Slide 38
Slide 38 text
class Node
def to_s
"#{@name} UV> #{@value}\n" +
@children.map { |c| indent(c.to_s) }.join('')
end
private
def indent(s)
s.lines.map { |l| ' ' + l }.join('')
end
end
Slide 39
Slide 39 text
puts price_formula.evaluate(input)
Slide 40
Slide 40 text
puts price_formula.evaluate(input)
+ ./> 4200
const ./> 200
* ./> 4000
var volume ./> 20
var distance ./> 200
Slide 41
Slide 41 text
puts price_formula.evaluate(input).value
Slide 42
Slide 42 text
puts price_formula.evaluate(input).value
4200
Slide 43
Slide 43 text
+ UV> 4200
const UV> 200
* UV> 4000
var volume UV> 20
var distance UV> 200
Slide 44
Slide 44 text
+
(= 4200)
const
(= 200)
*
(= 4000)
var distance
(= 200)
var volume
(= 20)