Review

Warm-up exercise: What does this function do?

def mystery(lst : List[Int], n : Int) : List[Int] = 
   if (lst.isEmpty) n :: Nil else lst.head :: mystery(lst.tail, n)

http://ActiveLecture.org

Case Classes

Case Class Instances

Pattern Matching

Example: Polynomials

class Poly
case class Const(value: Double) extends Poly
case class X extends Poly
case class Sum(left: Poly, right: Poly) extends Poly
case class Prod(left: Poly, right: Poly) extends Poly

def deriv(p: Poly): Poly = p match {
   case Const(v) => Const(0)
   case X() => Const(1)
   case Sum(f, g) => Sum(deriv(f), deriv(g))
   case Prod(f, g) => Sum(Prod(f, deriv(g)), Prod(deriv(f), g))
}

deriv(Sum(Prod(X(),X()),X()))
res: Poly = Sum(Sum(Prod(X(),Const(1.0)),Prod(Const(1.0),X())),Const(1.0))

Homework Tips

Lab