Я пытаюсь понять, почему эта функция не работает должным образом. Я подозреваю в сообщении об ошибке, что он имеет какое-то отношение к тому, как я создаю пустой вектор для аккумулятора.Как построить вектор по вызову для уменьшения
У меня есть простая функция, которая возвращает последовательность векторов 2-элементных:
(defn zip-with-index
"Returns a sequence in which each element is of the
form [i c] where i is the index of the element and c
is the element at that index."
[coll]
(map-indexed (fn [i c] [i c]) coll))
Это работает отлично. Проблема возникает, когда я пытаюсь использовать его в другой функции
(defn indexes-satisfying
"Returns a vector containing all indexes of coll that satisfy
the predicate p."
[p coll]
(defn accum-if-satisfies [acc zipped]
(let [idx (first zipped)
elem (second zipped)]
(if (p elem)
(conj acc idx)
(acc))))
(reduce accum-if-satisfies (vector) (zip-with-index coll)))
Он компилирует, но когда я пытаюсь использовать его я получаю сообщение об ошибке:
user=> (indexes-satisfying (partial > 3) [1 3 5 7])
ArityException Wrong number of args (0) passed to: PersistentVector
clojure.lang.AFn.throwArity (AFn.java:437)
Я не могу понять, что происходит не так Вот. Кроме того, если есть более «способ, похожий на Clojure» на то, что я пытаюсь сделать, мне также интересно узнать об этом.
Это было именно проблема. Такая маленькая вещь. Мне нравится ваша версия намного лучше. –