13

特に、パターン マッチングとケース クラスに関して。次の点を考慮してください。

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は、それが再帰関数であるということですが、私が書いた/扱った他の再帰関数とは異なり、終了を避けるために基本ケースが最後になります早い。

4

3 に答える 3