package kapitel_05 /** * Beispiel aus * * - Algorithmen und Datenstrukturen für Dummies * - von Andreas Gogol-Döring und Thomas Letschert * - Verlag Wiley-VCH; Oktober 2019 * - Kapitel 5, Bäume: Immer einer über den anderen * * @author A. Gogol-Döring, Th. Letschert */ object AuD_05_11_ExpressionTree_App extends App { sealed abstract class Expr case class Number(number: Int) extends Expr case class Add(left: Expr, right: Expr) extends Expr case class Sub(left: Expr, right: Expr) extends Expr case class Mult(left: Expr, right: Expr) extends Expr def Evaluate(expr: Expr): Int = expr match { case Number(n) => n case Add(l, r) => Evaluate(l) + Evaluate(r) case Sub(l, r) => Evaluate(l) - Evaluate(r) case Mult(l, r) => Evaluate(l) * Evaluate(r) } val two = Number(2) val three = Number(3) val four = Number(4) val five = Number(5) val threeTimesFour = Mult(three, four) val twoPlusThreeTimesFour = Add(two, threeTimesFour) val twoPlusThreeTimesFourMinusFive = Sub(twoPlusThreeTimesFour, five) println(Evaluate(twoPlusThreeTimesFourMinusFive)) }