Подтвердить что ты не робот

Почему нет заглянуть! функция для переходных векторов clojure?

Clojure имеет переходные аналоги для некоторых своих постоянных структур данных, векторов, карт и множеств. Для векторов существуют функции pop! и conj!, аналогичные pop и conj для постоянных векторов, но не peek!.

Есть ли техническая причина, из-за которой невозможна эффективная реализация peek!? Или это просто не нужно в большинстве случаев использования для переходных векторов? Я всегда могу сделать

(defn peek! [tvec] (get tvec (dec (count tvec))))

Но кажется странным, что нет встроенного решения.

4b9b3361

Ответ 1

Это действительно вопрос дизайна, наиболее подходящий для ggroup, но FWIW, я исследовал peek/peek! некоторое время назад, и предоставление peek! кажется простым вопросом создания нового интерфейса clojure.lang.ITransientStack для параллельный clojure.lang.IPersistentStack и имеющий переходные векторы реализуют его.

Я предполагаю, что если такой интерфейс еще не доступен (и используется переходными процессами), это, вероятно, вопрос приоритетов. Реализация одного потока с быстрым стеком уже доступна в Clojure в форме java.util.Stack, поэтому мы не упускаем здесь много функций; синтаксическое удобство и плавное преобразование в постоянные векторы, вероятно, будут достигнуты, когда прогресс будет сделан на Clojure -in- Clojure.

(Когда доход от инвестирования высок, улучшения на стороне Java Clojure имеют смысл, даже если конечная цель состоит в том, чтобы в конечном итоге отказаться от соответствующей части Java-кода и заменить ее реализацией в Clojure Если ожидаемая доходность ниже, может возникнуть больше смысла ждать, пока протоколы будут использоваться повсеместно и т.д. Доступный в настоящее время набор функций для обработки переходных процессов достаточно для собственных потребностей Clojure, и я не уверен, что когда-либо было вызовите peek! в ggroup - как для # clojure, я помню один соответствующий разговор - так что возвращение, вероятно, считается низким... Вы могли бы начать массовые движения, чтобы изменить это, хотя.:-))