【发布时间】:2018-08-05 17:59:30
【问题描述】:
我知道以前有人问过这个问题,但我找不到我遇到的问题的答案。下面的代码在-“(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:查找最小交换的代码尚未完成。
【问题讨论】:
-
我编辑了 swap-arr 方法。我正在尝试交换向量中的元素,并且此方法适用于 REPL
-
swap-arr有效,但minimumSwaps真的不是 Clojure。for不应像 Java 或 Python 中的循环一样使用,并且将 var 与ref绑定作为循环的一部分将不起作用。有关基本循环,请查看loop in the docs -
我认为 `(println (arr 0)) 在任何情况下都会打印 nil,无论 arr 中是否有 0。
-
谢谢!习惯功能性思维方式需要一些时间。