def ders2(s: List[Char], r: Rexp) : Rexp = (s, r) match {+ −
case (Nil, r) => r+ −
case (s, ZERO) => ZERO+ −
case (s, ONE) => if (s == Nil) ONE else ZERO+ −
case (s, CHAR(c)) => if (s == List(c)) ONE else + −
if (s == Nil) CHAR(c) else ZERO+ −
case (s, ALT(r1, r2)) => ALT(ders2(s, r2), ders2(s, r2))+ −
case (c::s, r) => ders2(s, der(c, r).simp)+ −
}+ −