Я прохожу документ Scala by Example и у меня возникают проблемы с упражнением 9.4.2. Вот текст:
Упражнение 9.4.2 Рассмотрим проблему написания функции flatten
, которая принимает список списков элементов в качестве аргументов. Результатом flatten
должно быть объединение всех списков элементов в один список. Вот реализация этого метода в терминах :\
.
def flatten[A](xs: List[List[A]]): List[A] =
(xs :\ (Nil: List[A])) {(x, xs) => x ::: xs}
Подумайте о замене тела сплющенного на
((Nil: List[A]) /: xs) ((xs, x) => xs ::: x)
Какая разница в асимптотической сложности между двумя версиями flatten?
Фактически flatten предопределен вместе с набором других пользовательских функций в объекте.
Вызван список в стандартной библиотеке Scala. Доступ к нему можно получить из пользовательской программы, вызвав List.flatten. Обратите внимание, что flatten не является методом класса List - он не имеет смысла, поскольку он применяется только к спискам списков, а не ко всем спискам в целом.
Я не вижу, как асимптотическое время этих двух вариантов функции различается. Я уверен, что это потому, что мне не хватает чего-то фундаментального в значении сгибания влево и сгиба вправо.
Вот pdf документа, который я описываю:
http://www.scala -lang.org / доку / файлы / ScalaByExample.pdf
Обычно я нахожу это отличным введением в Scala.