繁体   English   中英

IllegalStateException尝试调用未绑定的fn

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM