Являются ли все неизменные структуры данных в Elixir стойкими? Если нет, то какие из них, а какие нет? Кроме того, как они сравниваются с постоянными структурами данных в Clojure?Имеет ли Elixir постоянные структуры данных, подобные Clojure?
ответ
Да, большинство из них являются постоянными структурами данных.
Например, списки Elixir связаны списки, и связанный список является вырожденным деревом (оно имеет только один филиал):
Elixir: list = [1, 2, 3, 4]
Tree: 1 -> 2 -> 3 -> 4
Каждый раз, когда вы предварять элемент в список, он будет делить его хвост:
Elixir: [0|list]
Tree: 0 -> (1 -> 2 -> 3 -> 4)
реализация HashSet и HashDict эликсира основана на постоянных структуры данных Clojure и эффективны дерева. There is some write up on Joseph's blog.
Карты также являются постоянными структурами данных, и они очень интересны, потому что их изменение представления зависит от количества ключей. Если у вас есть маленькие карты, скажем:
%{:foo => 1, :bar => 2, :baz => 3}
Оно представлено как:
-------------(:foo, :bar, :baz)
|
(map, keys, values)
|
------(1, 2, 3)
Таким образом, каждый раз при обновлении одного ключа, мы разделяем «ключи» ведро и изменить только значение ведро. Это очень эффективно для небольших карт, но как только вы доберетесь до ~ 20 ключей, в Erlang 18, они меняют свое представление на основе Hash Array Mapped Tries, что похоже на Clojure.
Примечание: кортежи не являются постоянными (они представляют собой непрерывное пространство в памяти). Как только вы меняете один элемент в кортеже, создается совершенно новый кортеж. Это делает их отличными для хранения и доступа к нескольким элементам, а также для сопоставления шаблонов, но вы определенно не хотите содержать много элементов.
Спасибо! Поэтому основное отличие заключается в том, что нет постоянных векторов/кортежей. Есть ли запись свойств списка эликсиров? Является ли счет O (1)? Что означает конец? –
Здесь найден ответ, длина O (n), добавление к концу - O (n). Любой план реализации постоянных векторов? –
В настоящее время у вас есть два варианта: используйте модуль «массив» Эрланга или используйте карты как векторы (ключи - это числа). Второй вариант будет недостаточным, если вы хотите сделать очень конкретные векторные операции. Мы обсуждали вопрос о добавлении векторов, но в настоящее время это не относится к «дорожной карте». –
- 1. Структуры и постоянные структуры
- 2. Сериализация структуры данных Clojure
- 3. Clojure :: ворса подобные намеки
- 4. Структуры данных PHP (Java-подобные) Коллекции
- 5. токенов и Эрланга подобные ссылки в Clojure
- 6. Стойкие структуры данных в C++
- 7. Имеет ли Flash свойства, подобные C#?
- 8. Имеет ли Ruby правильные операторы, подобные Python?
- 9. Имеет ли yii2 постоянные параметры подключения?
- 10. Имеет ли clojure сырую строку?
- 11. Имеет ли clojure макросы идентификатора?
- 12. Имеет ли Clojure переменные ссылки?
- 13. Вычисление глубины структуры данных дерева - clojure
- 14. Преобразование коллекций Java в структуры данных Clojure
- 15. Ленивые саморекурсивные структуры данных в Clojure
- 16. Эффективные постоянные структуры данных для реляционной базы данных
- 17. Размер Java сериализовать структуры данных Clojure
- 18. Преобразование структуры данных Clojure в Java коллекции
- 19. Использование структуры данных Clojure с помощью MapDB
- 20. Clojure: отменить символ для новой структуры данных
- 21. Elixir новообращенной структуры на карту
- 22. Clojure Web (HttpKit, Manifold) vs Elixir/Pheonix
- 23. Emacs - представляют собой JSON-подобные структуры
- 24. Общие типы, права собственности и постоянные структуры данных
- 25. Как кодировать большие сложные, постоянные структуры данных в C++
- 26. Имеет ли сообщество clojure эквивалент perltidy?
- 27. Имеет ли Clojure функцию, например, Mathematica%?
- 28. Имеет ли clojure эквивалент выхода C#?
- 29. Имеет ли Clojure эквивалент пакета импорта Java. *?
- 30. Имеет ли clojure полнофункциональную функцию диапазона?
Вы имеете в виду это, верно? http://hypirion.com/musings/understanding-persistent-vector-pt-1 – GavinBrelstaff