【问题标题】:Clojure NullPointerException on for loopfor循环上的Clojure NullPointerException
【发布时间】: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 有什么关系?

【问题讨论】:

    标签: clojure lisp idioms


    【解决方案1】:

    第二行有一对额外的括号。您可能想在此处添加 do 并且它会起作用。

    【讨论】:

    • 这发生在你学习 Clojure 时,会随着练习而消失 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-23
    • 2012-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多