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,它会起作用。