Just as a follow-on, I went back to the Calculator Kata and applied a functional Ruby approach with the rule of no mutable state allowed. I was inspired by Tom Stuart's Thinking Functionally in Ruby talk.
This time I create a reusable
Proc for scanning the expression according to the regex that extracts
[left_operand, operator, right_operand] arrays. I evaluate the expression with
reduce, using the evaluation of the first equation in the expression as the initial value, and then applying that as the left hand side of all other equations in the expression. The
drop(1) call removes the first element of the parsed expression so that the
reduce call can operate on the second and all subsequent equations in the expression. Since the initial value passed to
reduce is the evaluation of the first equation, the memo passed to all evaluations in the
reduce block is the last evaluated result.
The above code passes the same spec as I included in the previous post