我意识到以前有人问过这个问题,但我找不到我遇到的问题的答案。以下代码在 - “(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:查找最小掉期的代码还没有完成。
最佳答案
我意识到,我在调试时遇到了错误,那是因为“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)))
关于clojure - IllegalStateException 试图调用未绑定(bind)的 fn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51696934/