Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object Program {
- case class Equality(left: Expression, right: Expression) {
- override def toString(): String =
- left.toString() + "=" + right.toString()
- def reduce(): Equality =
- Equality(left.reduce(), right.reduce())
- }
- abstract class Expression {
- def reduce(): Expression =
- this
- }
- case class Add(left: Expression, right: Expression) extends Expression {
- override def reduce(): Expression =
- (left.reduce(), right.reduce()) match {
- case (Number(left), Number(right)) =>
- Number(left + right)
- //3x + 8x = 11x
- case (Mul(Number(value), Var(name)), Mul(Number(otherValue), Var(otherName))) if name == otherName =>
- Mul(Var(name), Number(value * otherValue))
- case (left, right) =>
- Add(left, right)
- }
- override def toString(): String =
- "(" + left.toString() + "+" + right.toString() + ")"
- }
- case class Mul(left: Expression, right: Expression) extends Expression {
- override def reduce(): Expression =
- (left.reduce(), right.reduce()) match {
- case (Number(left), Number(right)) =>
- Number(left * right)
- case (left, right) =>
- Mul(left, right)
- }
- override def toString(): String =
- "(" + left.toString() + "*" + right.toString() + ")"
- }
- case class Number(value: BigDecimal) extends Expression {
- override def toString(): String =
- value.toString()
- }
- case class Var(name: String) extends Expression {
- override def toString(): String =
- name
- }
- def main(args: Array[String]) {
- val e = Add(Mul(Number(3), Var("x")), Mul(Number(4), Var("x")))
- println("antes do reduce = " + e.toString())
- println("depois do reduce = " + e.reduce.toString())
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement