package v1 sealed abstract class Formula{ override def toString() = this match { case Equals(t1,t2)=> t1.toString+"="+t2.toString case NotEquals(t1,t2)=> t1.toString+"!="+t2.toString } } case class Equals(t1: Term,t2: Term) extends Formula case class NotEquals(t1: Term, t2: Term) extends Formula sealed abstract class Term{ override def toString() = this match { case Car(a) => "car("+a.toString+")" case Cdr(a) => "cdr("+a.toString+")" case Var(a) => a case Null() => "Null" case Cons(a,b)=>"cons("+a.toString+","+b.toString+")" } } case class Car(t: Term) extends Term case class Cdr(t: Term) extends Term case class Var(n: String) extends Term case class Null() extends Term case class Cons(x: Term, t: Term) extends Term //sealed abstract class MyList extends Term