![](/img/trans.png)
[英]IllegalStateException: Attempting to call unbound fn in macro
[英]IllegalStateException Attempting to call unbound fn
我意识到以前曾有人问过这个问题,但我找不到我遇到的问题的答案。 下面的代码在-“(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”是一个懒惰的seq,而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)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.