case classを利用したパターンマッチで、引数の中身をListにしたくない
以下のプログラムを実行したとします。
sealed trait Expr
case class N(n: Int) extends Expr
case class Var(x: String, a: Int, n: Int) extends Expr
case class Add(n: Expr*) extends Expr
case class Mul(n: Expr*) extends Expr
def add(xs: List[Expr]): Expr = xs match {
case List() => N(0)
case List(xs) => xs
case xs => Add(xs: _*) // Add(List(N(1), N(2), Var(x,2,2)))
}
println(add(List(N(1),N(2),Var("x",2,2)))) // Add(List(N(1), N(2), Var(x,2,2)))
このプログラムで期待する出力結果は
Add(N(1), N(2), Var(x,2,2))
なのですが、実際の出力結果は
Add(List(N(1), N(2), Var(x,2,2)))
となってしまいます。上記のプログラムで期待する出力結果にする方法をご教示いただけますでしょうか。
どうぞよろしくお願いします。