使用循环查找序列中最小的数字失败

时间:2017-11-27 23:43:36

标签: clojure

我是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 函数会注意函数返回,为什么会发生?

1 个答案:

答案 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))))))