我是Clojure初学者,我无法解码错误的含义或理解为什么在我的小程序中发生错误,以找到序列中的最小数字。
(defn find-min
[nums]
(loop [smallest 1000000 i 0]
(if (= (count nums) i)
smallest)
(if (< (nums i) smallest)
(recur (nums i) (inc i))
(recur smallest (inc i)))))
(find-min [3 4 0 2])
IndexOutOfBoundsException clojure.lang.PersistentVector.arrayFor(PersistentVector.java:158)
现在我明白有一个索引出界错误,但是第一个 if 函数会注意函数返回,为什么会发生?
答案 0 :(得分:0)
您的两个if
处于同一级别,因此它们将随后执行。您可能希望将第二个if
嵌套在第一个if
(defn find-min[nums]
(loop [smallest 1000000 i 0]
(if (= (count nums) i)
smallest
(if (< (nums i) smallest)
(recur (nums i) (inc i))
(recur smallest (inc i))))))