(ответ переместился из этого дубликата )
Вот вариант, который является
Код:
def compress[A](xs: List[A]): List[A] = {
@annotation.tailrec
def rec(rest: List[A], stack: List[A]): List[A] = {
(rest, stack) match {
case (Nil, s) => s
case (h :: t, Nil) => rec(t, List(h))
case (h :: t, a :: b) =>
if (h == a) rec(t, stack)
else rec(t, h :: stack)
}
}
rec(xs, Nil).reverse
}
Пример
println(compress(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e)))
создает следующий выход:
List('a, 'b, 'c, 'a, 'd, 'e)
Поместите точку останова в objc_exception_throw
и запущенный Ваше приложение через Отладку вместо Выполнения
Разъясниться, что Вы на самом деле видите, когда Вы получаете исключение без точки останова, всегда - то же отслеживание стека - это - обработчик необработанных исключений. Тип исключения зарегистрирован к консоли Run, но если Вы хотите видеть след для того, где исключение было повышено, это - то, для чего точка останова.