Какие библиотеки предоставляют постоянные структуры данных?

Я стал зависимым от структур данных ядра Clojure. Когда я работаю на других языках, я стараюсь оставаться верным своим идиомам, но изредка несколько устойчивых структур данных - это правильное решение проблемы.

В частности, я ищу реализации векторов Фила Багвелла и массивов (например, хеш-карт). Соответствующие библиотеки должны включать в себя наборы, очереди и отсортированные варианты набора/карты для бонусных очков.

Ответ 1

Haskell имеет много постоянных коллекций в различных библиотеках, достаточно, чтобы было неприлично перечислять их здесь, поэтому я упомянул только о ближайшем эквиваленте Clojure HAMTs.

Я хотел бы увидеть 32-х кратное изменение на неупорядоченных контейнерах, что больше похоже на Clojure.

Ответ 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, но поддерживает вставки в любом точка.