ちゃんと説明するとScalaには代数的データ型そのものは無いけど、 case classという機能をつかってほぼ同等(以上)のことができる。こんな感じ
/* 代数的データ型 */ abstract sealed class Exp case class Add(a :Exp, b :Exp) extends Exp case class Num(v :Int) extends Exp def eval(e :Exp) :Int = e match {//パターンマッチ case Add(l, r) => eval(l) + eval(r) case Num(v) => v } eval(Add(Num(1), Num(2)))