Я использую вопросы Project Euler, чтобы помочь мне понять clojure, и я столкнулся с исключением, которое я не могу понять. nillify и change-all определены внизу для справки.
(loop [the-vector (vec (range 100))
queue (list 2 3 5 7)]
(if queue
(recur (nillify the-vector (first queue)) (next queue))
the-vector))
Это вызывает исключение NullPointerException, и я не могу понять, почему. Единственная часть кода, которую я вижу, что может вызвать такое исключение - это вызов nillify, но не похоже, что очередь когда-либо сводится к одному элементу до того, как исключение выдается и даже если очередь станет пустой, для этого предназначен оператор if.
Есть идеи?
"с учетом вектора, значения и списка индексов, вернуть вектор w / everthing @ indice = value"
(defn change-all [the-vector indices val]
(apply assoc the-vector (interleave indices (repeat (count indices) val))))
"учитывая вектор и значение val, вернуть вектор, в котором все записи с индексами, равными кратным значениям val, обнуляются, но оставляют исходный нетронутым"
(defn nillify [coll val]
(change-all coll (range (* 2 val) (inc (last coll)) val) nil))