Guest User

Untitled

a guest
Oct 11th, 2012
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.87 KB | None | 0 0
  1. object Book extends App {
  2.   abstract class Expr { def eval: Double }
  3.  
  4.   class Op(name: String, op: (Double, Double) => (Double)) extends Expr {
  5.     var left: Expr = null
  6.     var right: Expr = null
  7.     def apply(_left:Expr , _right: Expr) = {left = _left; right = _right; this}
  8.     def eval = op(left.eval, right.eval)
  9.     override def toString = "%s(%s, %s)".format(name, left, right)
  10.   }
  11.  
  12.   case class Value(eval:Double) extends Expr {
  13.     override def toString = eval.toString
  14.   }
  15.  
  16.   implicit def MakeValue(d: Double) = new Value(d)
  17.  
  18.   def MakeOperator(name: String, op: (Double, Double) => (Double)): Op = new Op(name, op)
  19.  
  20.   def prod = MakeOperator("prod", _*_)
  21.   def sum = MakeOperator("sum", _+_ )
  22.   def div = MakeOperator("div", _/_)
  23.  
  24.   def test(x: Expr) { println(x + " = " + x.eval) }
  25.  
  26.   test(prod(sum(sum(2, 3), 1), 5))
  27.   test(div(sum(28, 2), prod(5, 2)))
  28. }
Advertisement
Add Comment
Please, Sign In to add comment