08/05/05 01:13:40
ちゃんと説明すると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)))
まあ、MLの代数的データ型の定義に比べて記述が冗長だけど、機能的には
問題ない。