在clojure中执行循环时出现空指针异常

Dav*_*vid 0 clojure

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

;; => #'user/my-loop
user> (my-loop 10)
Run Code Online (Sandbox Code Playgroud)

为什么在执行此函数时会出现空指针异常?这不是正常的递归吗?

dpa*_*sen 8

您正在(println x)使用附加的括号层调用 return 。println返回nil所以调用它会导致NullPointerException.

要评估一个以上的表单,其中只需要一个do表单,请使用特殊表单,它评估任意数量的表单并返回最后一个的值:

(defn my-loop [x]
  (cond (> x 1) (do
                  (println x)
                  (my-loop (- x 1)))))
Run Code Online (Sandbox Code Playgroud)

在这种情况下,when可以更换一个武装conddo

(defn my-loop [x]
  (when (> x 1)
    (println x)
    (my-loop (- x 1))))
Run Code Online (Sandbox Code Playgroud)