Почему нет заглянуть! функция для замыкания переходных векторов? - PullRequest
10 голосов
/ 08 июля 2010

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

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

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

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

1 Ответ

5 голосов
/ 09 июля 2010

Это действительно вопрос дизайна, лучше всего направленный в 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, я помню один соответствующий разговор - так что возвращение, вероятно, считается низким ..Вы можете начать массовые движения, чтобы изменить это.: -))

...