clojure - IllegalStateException 试图调用未绑定(bind)的 fn

标签 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:查找最小掉期的代码还没有完成。

最佳答案

我意识到,我在调试时遇到了错误,那是因为“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/

相关文章:

java - 在 Eclipse 中导出单个 .jar 时避免重复库 .jars

macros - 关于匿名 "self referential"数据结构的建议/讨论

lisp - 在 CLISP 中列出目录

programming-languages - 您可以使用哪些语言即时动态重写函数?

variables - 在 LISP 中扩展列表中的变量

lisp - Lisp 中的反转列表

javascript - 如何从 JSCL 方法调用 Common Lisp 代码

clojure - Compojure:陷阱 500 URL 解码错误

http - 是否可以验证 GET 是来自按钮还是输入 URL 栏?

clojure - 在 leiningen/clojure 中使用 incanter