在clojure中执行循环时出现空指针异常
(defn my-loop [x]
(cond (> x 1)
((println x)
(my-loop (- x 1)))
)
)
;; => #'user/my-loop
user> (my-loop 10)
为什么在执行此函数时会出现空指针异常?这不是正常的递归吗?
回答
您正在(println x)使用附加的括号层调用 return 。println返回nil所以调用它会导致NullPointerException.
要评估一个以上的表单,其中只需要一个do表单,请使用特殊表单,它评估任意数量的表单并返回最后一个的值:
(defn my-loop [x]
(cond (> x 1) (do
(println x)
(my-loop (- x 1)))))
在这种情况下,when可以更换一个武装cond和do
(defn my-loop [x]
(when (> x 1)
(println x)
(my-loop (- x 1))))