EDIT: Это не было проблемой при уменьшении или уменьшении функции. Я затенял функцию clojure.core/range
.Странное поведение уменьшения в Clojure
У меня есть функция
(defn- roundfn [[xi ci bi oi :as state] r]
(let [[xn cn bn] (newstate [xi ci bi] 0)
exfn (word<-x xn)]
[xn cn bn
(into oi
[(exfn [6 3 6 1])
(exfn [4 1 4 7])
(exfn [2 7 2 5])
(exfn [0 5 0 3])])]))
, где x1, x2, x4 и сами являются векторами. x3 - значение.
Когда я уменьшить эту функцию как
(reduce roundfn [[][] 0 []] (range 3))
или
(reduce roundfn [[][] 0 []] (vec (range 3)))
Я получаю IndexOutOfBoundsException clojure.lang.PersistentVector.arrayFor (PersistentVector.java:107)
Когда я уменьшить эту функцию как
(reduce roundfn [[][] 0 []] [0 1 2])
работает, как ожидалось
Что 'roundfn' делать? –
Не уверен, что вы видели мои изменения, но 'roundfn' пересчитывает значения в x1 и x2 с помощью x3. Это новое состояние используется для вычисления выходного сигнала, который входит в 4-й вектор. В принципе, первые три элемента представляют текущее состояние, а четвертое - сбор данных на основе этого состояния. Вызов функции bumps в следующее состояние и добавление к выходу на основе этого состояния. –
Я думаю, проблема в 'roundfn'. Если вы просто вернете 'xs' из' roundfn', нет 'IndexOutOfBoundsException'. Без кода для этой функции очень сложно понять, что вызывает проблему. –