Я использую вопросы Project Euler, чтобы помочь мне изучить clojure, и я столкнулся с исключением, которое я не могу понять. nillify и change-all определены в нижней части для справки.Что вызывает это исключение NullPointerException?
(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.
Любые идеи?
«задан вектор, значение и список индексов, возвращающий вектор ж/Everthing @ Indice = значение»
(defn change-all [the-vector indices val]
(apply assoc the-vector (interleave indices (repeat (count indices) val))))
«данный вектор и Валя, возвращает вектор, в котором все записи с индексами, равными кратный Вал является nilled, но оставить нетронутое оригинальную»
(defn nillify [coll val]
(change-all coll (range (* 2 val) (inc (last coll)) val) nil))
Вы можете включать NPE трассировки стека? –
Кроме того, я исправил один предполагаемый недостающий parens в конце первой строки, но тело цикла все еще кажется перепутанным. –
Вторая строка в цикле; 'queue (list (2 3 5 7))]' должен быть 'queue (список 2 3 5 7)]'. Но это использовалось для того, чтобы бросать «ClassCastException», а не «NullPointerException». – Jonas