Skip to content

Instantly share code, notes, and snippets.

@kmizu
Created February 19, 2020 01:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kmizu/41c27103a87812a14f5abae0cbaa5910 to your computer and use it in GitHub Desktop.
Save kmizu/41c27103a87812a14f5abae0cbaa5910 to your computer and use it in GitHub Desktop.
Minimal Interpreter
case class Add(l: Tree, r: Tree) extends Tree
case class Sub(l: Tree, r: Tree) extends Tree
case class Mul(l: Tree, r: Tree) extends Tree
case class Div(l: Tree, r: Tree) extends Tree
case class Num(v: Int) extends Tree
// switch ≒ match
def eval(tree: Tree): Int = tree match {
case Add(l, r) => eval(l) + eval(r)
case Sub(l, r) => eval(l) - eval(r)
case Mul(l, r) => eval(l) * eval(r)
case Div(l, r) => eval(l) / eval(r)
case Num(v) => v
}
// 1 + (2 - 4)
val r = eval(
Add(Num(1), Sub(Num(2), Num(4)))
)
println(r)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment