特に、パターン マッチングとケース クラスに関して。次の点を考慮してください。
abstract class Expr
case class Var(name: String) extends Expr
case class Number(num: Double) extends Expr
case class UnOp(operator: String, arg: Expr) extends Expr
case class BinOp(operator: String, left: Expr, right: Expr) extends Expr
object Expr {
def simplify(expr: Expr): Expr = expr match {
// Some basic simplification rules...
case UnOp("-", UnOp("-", e)) => simplify(e) // Double negation
case BinOp("+", e, Number(0)) => simplify(e) // Adding zero
case BinOp("-", e, Number(0)) => simplify(e) // Subtracting zero
case BinOp("*", e, Number(1)) => simplify(e) // Multiplying by one
case BinOp("*", e, Number(0)) => Number(0) // Multiplying by zero
case _ => expr // Default, could not simplify given above rules
}
}
たとえば、サンプル呼び出しsimplify(UnOp("-", UnOp("-", UnOp("-", UnOp("-", Var("x"))))))
(結果がVar("x")
) が与えられた場合、一致式の選択肢の順序はパフォーマンスに影響しますか?
サイドノート、一種の関連(私自身の観察):本当に私を驚かせることの1つsimplify
は、それが再帰関数であるということですが、私が書いた/扱った他の再帰関数とは異なり、終了を避けるために基本ケースが最後になります早い。