object p07 {
def flatten(list: List[Any]): List[Any] = list flatMap {
case ms: List[Any] => flatten(ms)
case e => List(e)
} //> flatten: (list: List[Any])List[Any]
flatten(List(List(1, 1), 2, List(3, List(5, 8))))
//> res0: List[Any] = List(1, 1, 2, 3, 5, 8)
flatten(List(List(1, 1), 2, List(3, List(5, 8),List())))
//> res1: List[Any] = List(1, 1, 2, 3, 5, 8)
flatten(List(List(2, 1), List(3, List(5, 8,List()))))
//> res2: List[Any] = List(2, 1, 3, 5, 8)
}
object p08 {
def compress(list: List[Symbol]):List[Symbol] = list match{
case x::y::tail => if(x!=y) x::compress(y::tail) else compress(y::tail)
case x::Nil => List(x)
case Nil => Nil
} //> compress: (list: List[Symbol])List[Symbol]
compress(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e))
//> res0: List[Symbol] = List('a, 'b, 'c, 'a, 'd, 'e)
compress(List()) //> res1: List[Symbol] = List()
def compress2(list: List[Symbol]):List[Symbol] = list.distinct
//> compress2: (list: List[Symbol])List[Symbol]
compress2(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e))
//> res2: List[Symbol] = List('a, 'b, 'c, 'd, 'e)
compress2(List()) //> res3: List[Symbol] = List()
}