【发布时间】:2015-12-18 22:28:37
【问题描述】:
我正要拔掉这个头发。
在某些情况下,我正在 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的新手,不知道我在这里做错了什么。与同一个 seq 上的三重 for 有什么关系?
【问题讨论】: