IllegalStateException尝试调用未绑定的fn

时间:2018-08-05 17:59:31

标签: clojure lisp

我知道这个问题以前曾被问过,但我找不到我所遇到问题的答案。下面的代码在-“(println(arr 0))”处出错。但是该行应打印出4吗?我是Clojure的新手,也不了解我在哪里出问题了。

我在REPL中尝试了(defn arr [4 3 2 1])(arr 0),这似乎可行。

(defn swap-arr [my-arr x y]
  (assoc my-arr x (my-arr y) y (my-arr x)))

(defn minimumSwaps [arr]
  (for [i (range (count arr))]
    (do (println (arr 0))
        (while (not= i (arr i))
          (def arr (swap-arr arr (arr i) (- 1 i)))))))

(minimumSwaps [4 3 2 1])

PS:查找最小交换的代码尚未完成。

1 个答案:

答案 0 :(得分:0)

我意识到,是在调试时出现错误,这是因为“ range”是一个惰性序列,而REPL不喜欢它。

我还是将代码更改为此-

(defn minimumSwaps [org-vec]
  (loop [mut-vec org-vec, i 0, swap-count 0]
(if (< i (count org-vec))
  (let [sub-arr (subvec mut-vec i)]
    (recur (swap-arr mut-vec (mut-vec i) (apply min sub-arr))
           (+ i 1)
           (if (= (apply min sub-arr) (mut-vec i)) swap-count (+ swap-count 1))))
  swap-count)))