在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可以更换一个武装conddo

(defn my-loop [x]
  (when (> x 1)
    (println x)
    (my-loop (- x 1))))


以上是在clojure中执行循环时出现空指针异常的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>