Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Book {
- val calc = Prod(Sum( (Sum(Number(2) , Number(3))),Number(1) ),Number(5))
- //> calc : Prod = Prod(Sum(Sum(Number(2),Number(3)),Number(1)),Number(5))
- val calc2 = Div(Sum(Number(28),Number(2)), Prod(Number(5),Number(2)))
- //> calc2 : Div = Div(Sum(Number(28),Number(2)),Prod(Number(5),Number(2)))
- calc.show //> res0: String = (((2 + 3) + 1) * 5)
- calc.eval //> res1: Int = 30
- calc2.show //> res2: String = ((28 + 2) / (5 * 2))
- calc2.eval //> res3: Int = 3
- }
- trait Expr{
- def eval: Int = {
- this match {
- case Number(x) => x
- case Sum(e1,e2) => e1.eval + e2.eval
- case Prod(e1,e2) => e1.eval * e2.eval
- case Div(e1,e2) => e1.eval / e2.eval
- }
- }
- def show: String = {
- this match {
- case Number(x) => x.toString
- case Sum(e1,e2) => "("+e1.show + " + " + e2.show+")"
- case Prod(e1,e2) => "("+e1.show + " * " + e2.show+")"
- case Div(e1,e2) => "("+e1.show + " / " + e2.show+")"
- }
- }
- }
- case class Number(n: Int) extends Expr
- case class Sum(e1: Expr, e2: Expr) extends Expr
- case class Prod(e1: Expr, e2: Expr) extends Expr
- case class Div(e1: Expr, e2: Expr) extends Expr
Advertisement
Add Comment
Please, Sign In to add comment