Guest User

Untitled

a guest
Oct 10th, 2012
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.32 KB | None | 0 0
  1. object Book {
  2. val calc = Prod(Sum( (Sum(Number(2) , Number(3))),Number(1) ),Number(5))
  3.                                                   //> calc  : Prod = Prod(Sum(Sum(Number(2),Number(3)),Number(1)),Number(5))
  4. val calc2 = Div(Sum(Number(28),Number(2)), Prod(Number(5),Number(2)))
  5.                                                   //> calc2  : Div = Div(Sum(Number(28),Number(2)),Prod(Number(5),Number(2)))
  6. calc.show                                         //> res0: String = (((2 + 3) + 1) * 5)
  7. calc.eval                                         //> res1: Int = 30
  8.  
  9. calc2.show                                        //> res2: String = ((28 + 2) / (5 * 2))
  10. calc2.eval                                        //> res3: Int = 3
  11. }
  12. trait Expr{
  13. def eval: Int = {
  14. this match {
  15. case Number(x) => x
  16. case Sum(e1,e2) => e1.eval + e2.eval
  17. case Prod(e1,e2) => e1.eval * e2.eval
  18. case Div(e1,e2) => e1.eval / e2.eval
  19. }
  20. }
  21.  
  22. def show: String = {
  23. this match {
  24. case Number(x) => x.toString
  25. case Sum(e1,e2) => "("+e1.show + " + " + e2.show+")"
  26. case Prod(e1,e2) => "("+e1.show + " * " + e2.show+")"
  27. case Div(e1,e2) => "("+e1.show + " / " + e2.show+")"
  28. }
  29. }
  30. }
  31.  
  32. case class Number(n: Int) extends Expr
  33. case class Sum(e1: Expr, e2: Expr) extends Expr
  34. case class Prod(e1: Expr, e2: Expr) extends Expr
  35. case class Div(e1: Expr, e2: Expr) extends Expr
Advertisement
Add Comment
Please, Sign In to add comment