Что такое DList?
Я попытался погуглить для этого, но все, что я получил, были истории о мелких знаменитостях. Учитывая отсутствие документации, что такое DList?
4 ответов
Это другой список, по линии "список различий как функции"
scala> val (l1, l2, l3) = (List(1, 2, 3), List(4, 5, 6), List(7, 8, 9))
l1: List[Int] = List(1, 2, 3)
l2: List[Int] = List(4, 5, 6)
l3: List[Int] = List(7, 8, 9)
эффективное добавляя:
scala> l1 ::: l2 ::: l3
res8: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
неэффективное добавления. Это создает промежуточный список (l1 ++ l2), затем ((l1 ++ l2) ++ l3)
scala> l1 ++ l2 ++ l3 // inefficient
res9: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
DList
сохраняет добавления, и только нужно создать один полный список, эффективно вызывая:
scala> List(l1, l2, l3) reduceRight ( _ ::: _)
res10: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
списки различий-это структура данных, подобная списку, которая поддерживает O (1) добавить операций.
Append и другие операции, которые изменяют список, представлены через функциональную композицию функций модификации, а не непосредственно копируют список.
пример, с библиотека dlist Хаскелла:
-- Lists as functions
newtype DList a = DL { unDL :: [a] -> [a] }
-- The empty list
empty = DL id
-- The append case: composition, a la Hughes
append xs ys = DL (unDL xs . unDL ys)
-- Converting to a regular list, linear time.
toList = ($[]) . unDL
техника восходит по крайней мере к Юз 84, новое представление списков и его применение к функции "reverse", R. John Hughes, 1984., где он предлагает представлять списки как функции и добавлять как функциональную композицию, позволяя, например, reverse работать в линейном времени. Из газеты:
Это тип данных в неканонической scalaz пакет, полезный для типизированных списков с постоянным доступом на обоих концах. (Трюк заключается в том, чтобы google для "scala"и " dlist".)
DList, тип данных для представления элементов одного типа с операциями добавления/добавления постоянного времени.