package Main
abstract class Term
case class Var(name: String) extends Term
case class Fun(arg: String, body: Term) extends Term
case class Appli(f: Term, v: Term) extends Term
object TermTest extends App {
def printTerm(term: Term) {
term match {
case Var(n) =>
print("" + n)
case Fun(x, b) =>
print("^" + x + ".")
printTerm(b)
case Appli(f, v) =>
Console.print("(")
printTerm(f)
print(" ")
printTerm(v)
print(")")
}
}
def isIdentityFun(term: Term): Boolean = term match {
case Fun(x, Var(y)) if x == y => true
case _ => false
}
val id = Fun("x", Var("x"))
println("id: " + id)
val t = Fun("x", Fun("y", Appli(Var("x"), Var("y"))))
println("t: " + t)
printTerm(t)
println
println(isIdentityFun(id))
println(isIdentityFun(t))
}