Advertisement
Guest User

Untitled

a guest
Apr 6th, 2014
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.79 KB | None | 0 0
  1. object Program {
  2.   case class Equality(left: Expression, right: Expression) {
  3.     override def toString(): String =
  4.       left.toString() + "=" + right.toString()
  5.  
  6.     def reduce(): Equality =
  7.       Equality(left.reduce(), right.reduce())
  8.   }
  9.  
  10.   abstract class Expression {
  11.     def reduce(): Expression =
  12.       this
  13.   }
  14.  
  15.   case class Add(left: Expression, right: Expression) extends Expression {
  16.     override def reduce(): Expression =
  17.       (left.reduce(), right.reduce()) match {
  18.         case (Number(left), Number(right)) =>
  19.           Number(left + right)
  20.  
  21.         //3x + 8x = 11x
  22.         case (Mul(Number(value), Var(name)), Mul(Number(otherValue), Var(otherName))) if name == otherName =>
  23.           Mul(Var(name), Number(value * otherValue))
  24.  
  25.         case (left, right) =>
  26.           Add(left, right)
  27.       }
  28.  
  29.     override def toString(): String =
  30.       "(" + left.toString() + "+" + right.toString() + ")"
  31.   }
  32.  
  33.   case class Mul(left: Expression, right: Expression) extends Expression {
  34.     override def reduce(): Expression =
  35.       (left.reduce(), right.reduce()) match {
  36.         case (Number(left), Number(right)) =>
  37.           Number(left * right)
  38.  
  39.         case (left, right) =>
  40.           Mul(left, right)
  41.       }
  42.  
  43.     override def toString(): String =
  44.       "(" + left.toString() + "*" + right.toString() + ")"
  45.   }
  46.  
  47.   case class Number(value: BigDecimal) extends Expression {
  48.     override def toString(): String =
  49.       value.toString()
  50.   }
  51.  
  52.   case class Var(name: String) extends Expression {
  53.     override def toString(): String =
  54.       name
  55.   }
  56.  
  57.   def main(args: Array[String]) {
  58.     val e = Add(Mul(Number(3), Var("x")), Mul(Number(4), Var("x")))
  59.  
  60.     println("antes do reduce = " + e.toString())
  61.     println("depois do reduce = " + e.reduce.toString())
  62.   }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement