私はClojureを学ぶのを助けるためにProject Eulerの質問を使用しています。私は把握できない例外に遭遇しました。 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文のためのものです。
アイデア?
いるすべてのベクトルを返す「、ベクターとvalを与え
(defn change-all [the-vector indices val]
(apply assoc the-vector (interleave indices (repeat (count indices) val))))
を「値= indice @ everthing/wのベクトルを返す、ベクトル値、及びインデックスのリストを与えられました」ヴァルの倍数に等しいインデックスを有するエントリnilledされているが、元の手つかずのまま」
(defn nillify [coll val]
(change-all coll (range (* 2 val) (inc (last coll)) val) nil))
あなたはNPEスタックトレースを含めることができますスタイルの問題として
、バインディングを聞かせて使いますか? –
また、最初の行の最後に1つの仮名が残っていると思われていましたが、ループの本体はまだ乱れているようです。 –
ループ内の2行目。 'queue(list(2 3 5 7))]'は 'queue(list 2 3 5 7)]'でなければなりません。しかし、それは 'ClassCastException'を投げていましたが、' NullPointerException'は投げませんでした。 – Jonas