for 循环上的 Clojure NullPointerException
Clojure NullPointerException on for loop
我要在这个问题上拔头发了。
在某些情况下,我正在 Clojure 中实现一个简单的算法。假设以下数据结构
(def inf Double/POSITIVE_INFINITY)
(def min-dist (atom {:1 {:1 0 :2 4} :2 {:1 4 :2 0 :3 5} :3 {:2 5 :3 0}}))
(def vertexes [:1 :2 :3])
以下代码将在第一次迭代后崩溃:
(for [k vertexes i vertexes j vertexes]
((println (str " " i " " k " "j))
(if (> (get-in @min-dist [i j] inf) (+ (get-in @min-dist [i k] inf) (get-in @min-dist [k j] inf)) )
(do
;;do some stuff
(println "bla"))
)))
具有以下输出:
:1 :1 :1 NullPointerException
user.core/eval7683/iter--7675--7684/fn--7685/iter--7677--7686/fn--7687/iter--7679--7688/fn--7689/fn--7690
(form-init1244434853692676604.clj:2)
我知道我在 if
期间可能违反了一些参考资料。但是我是 clojure 的新手,不知道我在这里做错了什么。与同一序列上的三重 for 有关系吗?
第二行多了一对括号。您可能想在那里添加 do,它会起作用。
我要在这个问题上拔头发了。
在某些情况下,我正在 Clojure 中实现一个简单的算法。假设以下数据结构
(def inf Double/POSITIVE_INFINITY)
(def min-dist (atom {:1 {:1 0 :2 4} :2 {:1 4 :2 0 :3 5} :3 {:2 5 :3 0}}))
(def vertexes [:1 :2 :3])
以下代码将在第一次迭代后崩溃:
(for [k vertexes i vertexes j vertexes]
((println (str " " i " " k " "j))
(if (> (get-in @min-dist [i j] inf) (+ (get-in @min-dist [i k] inf) (get-in @min-dist [k j] inf)) )
(do
;;do some stuff
(println "bla"))
)))
具有以下输出:
:1 :1 :1 NullPointerException
user.core/eval7683/iter--7675--7684/fn--7685/iter--7677--7686/fn--7687/iter--7679--7688/fn--7689/fn--7690 (form-init1244434853692676604.clj:2)
我知道我在 if
期间可能违反了一些参考资料。但是我是 clojure 的新手,不知道我在这里做错了什么。与同一序列上的三重 for 有关系吗?
第二行多了一对括号。您可能想在那里添加 do,它会起作用。