computationbook
computationbook copied to clipboard
no need two kind of machine in small-step.
Add class as example
change
class Add
def reduce(environment)
if left.reducible?
Add.new(left.reduce(environment), right)
elsif right.reducible?
Add.new(left, right.reduce(environment))
else
Number.new(left.value + right.value)
end
end
end
to
class Add < Struct.new(:left, :right)
def reduce(environment)
if left.reducible?
left_reduce, environment = left.reduce(environment)
[Add.new(left_reduce, right), environment]
elsif right.reducible?
right_reduce, environment = right.reduce(environment)
[Add.new(left, right_reduce), environment]
else
[Number.new(left.value + right.value), environment]
end
end
end
here is my small-step code
https://github.com/aQuaYi/computation/tree/master/small_step