Commit 6eb07c9

mo khan <mo@mokhan.ca>
2013-11-27 03:26:10
add boolean and lessthan.
1 parent 8d8fab9
Changed files (1)
spec
spec/practice/expression_spec.rb
@@ -76,9 +76,48 @@ class Multiply < Struct.new(:left, :right)
   end
 end
 
+class Boolean < Struct.new(:value)
+  def to_s
+    value.to_s
+  end
+
+  def inspect
+    "<<#{self}>>"
+  end
+
+  def reducible?
+    false
+  end
+end
+
+class LessThan < Struct.new(:left, :right)
+  def to_s
+    "#{left} < #{right}"
+  end
+
+  def inspect
+    "<<#{self}>>"
+  end
+
+  def reducible?
+    true
+  end
+
+  def reduce
+    if left.reducible?
+      LessThan.new(left.reduce, right)
+    elsif right.reducible?
+      LessThan.new(left, right.reduce)
+    else
+      Boolean.new(left.value < right.value)
+    end
+  end
+end
+
 describe "expressions" do
   it "can do math" do
     machine = Machine.new(Add.new(Multiply.new(Number.new(1), Number.new(2)), Multiply.new(Number.new(3), Number.new(4))))
-    p machine.run
+    result = machine.run
+    p result
   end
 end