Я новичок в Scala, и недавно я прошел через http://aperiodic.net/phil/scala/s-99/p09.scala и пытался решить проблему.
Вопрос: Упакуйте последовательные дубликаты элементов списка в подсписки. Если список содержит повторяющиеся элементы, они должны быть помещены в отдельные подсписки.
scala> pack(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e))
res0: List[List[Symbol]] = List(List('a, 'a, 'a, 'a), List('b), List('c, 'c), List('a, 'a), List('d), List('e, 'e, 'e, 'e))
Решение:
object P09 {
def pack[A](ls: List[A]): List[List[A]] = {
if (ls.isEmpty) List(List())
else {
val (packed, next) = ls span { _ == ls.head }
if (next == Nil) List(packed)
else packed :: pack(next)
}
}
}
Мой вопрос: что на самом деле делает строка кода ниже? Как это работает?
val(packed, next) = l span {_ == l.head}