Какие библиотеки предоставляют постоянные структуры данных?
Я стал зависимым от структур данных ядра Clojure. Когда я работаю на других языках, я стараюсь оставаться верным своим идиомам, но изредка несколько устойчивых структур данных - это правильное решение проблемы.
В частности, я ищу реализации векторов Фила Багвелла и массивов (например, хеш-карт). Соответствующие библиотеки должны включать в себя наборы, очереди и отсортированные варианты набора/карты для бонусных очков.
Ответы
Ответ 1
Haskell имеет много постоянных коллекций в различных библиотеках, достаточно, чтобы было неприлично перечислять их здесь, поэтому я упомянул только о ближайшем эквиваленте Clojure HAMTs.
Я хотел бы увидеть 32-х кратное изменение на неупорядоченных контейнерах, что больше похоже на Clojure.
Ответ 2
Ответ 3
Это часть моей собственной библиотеки, но я думаю, что я должен упомянуть об этом, потому что она ИМХО уникальна и очень полезна: PersistentTreeGrid, Он предлагает:
- Истинная постоянная структура данных
- Сохраняет данные в индексированном трехмерном пространстве
- Редкое хранилище - блоки идентичных значений объединяются, поэтому вы можете иметь огромные области с одинаковым значением со значительно меньшими потребностями в хранении.
- Подразделение реализовано через 64-way tree сетки 4x4x4
- Различные быстрые стратегии итераций для сканирования и изменения областей в пространстве
Он достаточно быстр, чтобы использоваться как хранилище для игр (например, разреженное хранение деформируемого 3D-ландшафта).
Он написан на Java, но я успешно использовал его на других языках JVM.
Ответ 4
Для Python существует fn.py, который реализует постоянные структуры данных вместе с добавлением некоторых других функциональных возможностей.
Существует еще одна библиотека python pyrsistent, которая выглядит более уверенной и эффективной.
Ответ 5
Для Python существует библиотека под названием pyrsistent (я автор). Он фокусируется исключительно на постоянных/функциональных структурах данных.
Он содержит реализации постоянных векторов, карт, множеств, записей, сумм, списка, деактивации, а также типов и инвариантных проверенных версий вектора, карты и множества.
Существует также множество удобных функций для преобразования в/из встроенных копий.
Дополнительную информацию и примеры см. в странице github.
Ответ 6
Paguro предоставляет безопасные версии Clojure неизменяемых коллекций и несколько других инструментов для функционального программирования на Java 8 a немного легче. Этот Вектор быстрее, чем тот, что находится в PCollections. Весь проект вписывается в файл баннера 200 Кбайт, который компилируется в профиле compact1. Все коллекции кропотливо вписываются в стандартный API коллекций Java. Включены пять реализаций коллекции из Clojure: Vector, HashSet, HashMap, SortedSet и SortedMap.
Там RRB-Tree в работе (на основе другой бумаги Фила Багвелла), например Clojure Vector, но поддерживает вставки в любом точка.