Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Book extends App {
- abstract class Expr { def eval: Double }
- class Op(name: String, op: (Double, Double) => (Double)) extends Expr {
- var left: Expr = null
- var right: Expr = null
- def apply(_left:Expr , _right: Expr) = {left = _left; right = _right; this}
- def eval = op(left.eval, right.eval)
- override def toString = "%s(%s, %s)".format(name, left, right)
- }
- case class Value(eval:Double) extends Expr {
- override def toString = eval.toString
- }
- implicit def MakeValue(d: Double) = new Value(d)
- def MakeOperator(name: String, op: (Double, Double) => (Double)): Op = new Op(name, op)
- def prod = MakeOperator("prod", _*_)
- def sum = MakeOperator("sum", _+_ )
- def div = MakeOperator("div", _/_)
- def test(x: Expr) { println(x + " = " + x.eval) }
- test(prod(sum(sum(2, 3), 1), 5))
- test(div(sum(28, 2), prod(5, 2)))
- }
Advertisement
Add Comment
Please, Sign In to add comment